Java--Servlet【Notes】

本文介绍Web3.0环境下Servlet的配置方法,包括注解配置拦截形式、多模式配置、解决中文乱码问题及数据获取技巧。同时探讨了转发与重定向的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、拦截形式配置
web3.0下,不用在web.xml中配置servlet,直接在servlet类上加注解就可以了
@WebServlet("/aaa/*")
相当于web.xml中配置的拦截模式urlPatterns,注意:自动生成的为@WebServlet("/servlet类名"),后面的/*是自己加的,否则后面还有内容的话不能被拦截。
2、关于servlet的几个地址详情
浏览器访问地址http://localhost:8081/Dima3773TestWeb/aaa/AAA得到的几个地址

1. String url = request.getRequestURI();
   		System.out.println("request URL:"+url);
   		结果:/Dima3773TestWeb/aaa/AAA
2、String contextPath = request.getContextPath();
	System.out.println("contextPath:" + contextPath);
	结果:/Dima3773TestWeb
3、String servletPath = request.getServletPath();
	System.out.println("servletPath:"+servletPath);
	结果:/aaa
4、String [] rr = url.split("/");
	String Id = rr[rr.length-1];
	System.out.println("Id:"+Id);
5、String pathInfo = request.getPathInfo();
   System.out.println("pathInfo:" + pathInfo);//AAA

3、servlet配置多个拦截模式
3.1、一个servlet在web.xml中可以配置多个拦截模式

<servlet>
	<servlet-name>TestServlet</servlet-name>
	<servlet-class>com.test.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>TestServlet</servlet-name>
	<url-pattern>/test1/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>TestServlet</servlet-name>
	<url-pattern>/test2/*</url-pattern>
</servlet-mapping>
3.2、对应的使用注解方式也可以配置多个拦截模式
@WebServlet({"/aaa/*","/bbb/*"})

4、servlet获取jsp表单(或http请求)提交的数据
4.1、根据name属性获取单个值

String email = request.getParameter("email");//email是jsp表单中的name值

4.2、获取表单提交的数据到map集合
方式一:原始方式提取数据集合,再将该集合重新提取一次到另一个集合

Map<String, String[]> parameterMap = request.getParameterMap();

注意:
1、这个返回值parameterMap有个特别之处——只能读。不像普通的Map类型数据一样可以修改。这是因为服务器为了实现一定的安全规范,所作的限制。比如WebLogic,Tomcat,Resin,JBoss等服务器均实现了此规范。
如果实在有必要在取得此值以后做修改的话,要新建一个map对象,将返回值复制到此新map对象中进行修改,用新的map对象代替使用之前的返回值。
2、提取request.getParameterMap()值到另一个可读写的集合

public static Map reqMapToMap(Map map) {
	Map returnMap = new HashMap();
	Set tmpKeySet = map.keySet();
	for (Iterator tmpIt = tmpKeySet.iterator(); tmpIt.hasNext();) {
		Object tmpKey = tmpIt.next();
		Object tmpVal = map.get(tmpKey);
		if (tmpVal instanceof Object[]) {
			tmpVal = ((Object[]) tmpVal)[0];
		}
		returnMap.put(tmpKey, tmpVal);
	}
	return returnMap;
}

方式二:工具类直接提取请求的数据

Map<String, String> paramsMap = Util.getParamsMap(request);
@SuppressWarnings("rawtypes")
	public static Map<String, String> getParamsMap(HttpServletRequest request) {
		Map<String, String> paramsMap = new HashMap<String, String>();
		for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
			String fieldName = (String) e.nextElement();
			String fieldValue = request.getParameter(fieldName);
			paramsMap.put(fieldName, fieldValue);
		}
		return paramsMap;
	}

5、servlet解决中文乱码
5.1解决请求数据的中文乱码

String address = new String(((String) parameterMap.get("address")[0]).getBytes("ISO8859-1"),"UTF-8");

5.2解决返回数据的中文乱码

// 解决返回数据中文乱码问题
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.getWriter().print("这是响应的数据!!");
response.getWriter().flush();
response.getWriter().close();

6、转发和重定向

response.sendRedirect("https://www.baidu.com/");//重定向
request.getRequestDispatcher("TestServlet1").forward(request, response);//转发

7、新建maven工程打包形式为war包,servlet起步依耐

<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.0.1</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.1</version>
		<scope>provided</scope>
	</dependency>
</dependencies>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值