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>