过滤器、监听器及Servlet3.0注解
一、过滤器
1.1流程
单个过滤器流程:Filter 对用户请求进行预处理,接着将请求交给 Servlet 进行处理并生成响应,最后 Filter 再对服务器响应进行后处理。
多个过滤器流程:Filter 对用户请求进行预处理接着交给下一个过滤器处理,过滤器处理完后将请求交给 Servlet 进行处理并生成响应,最后 Filter 再对服务器响应进行一系列 Filter 链的处理。
注:过滤器链:先配置先执行(请求时的执行顺序);响应时:以相反的顺序执行。
1.2 实现
1、新建普通java类
2、实现 javax.servlet.Fileter 接口
3、重写方法 ( init(), doFilter(), destroy() )
4、配置web.xml,并设置它所能拦截的资源。
过滤器:
public class Filter01 implements Filter {
/**
* 初始化,只执行一次 */
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter01 init....");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("Filter01");
// 请求到达资源之前处理的代码
System.out.println("Filter01 请求到达资源之前处理的代码...");
// 放行
chain.doFilter(request, response);
// 响应到客户端之前执行的代码
System.out.println("Filter01 响应到客户端之前执行的代码...");
}
/**
* 销毁,只执行一次
*/
@Override
public void destroy() {
System.out.println("Filter01 destroy....");
}
}
web.xml
<filter> <filter-name>filter01</filter-name><!-- 给服务器看的 -->
<filter-class>com.mage.filter.Filter01</filter-class>
<!-- 设置资源路径 -->
</filter>
<filter-mapping>
<filter-name>filter01</filter-name><!-- 给服务器看的 -->
<url-pattern>/s01</url-pattern><!-- 设置要拦截的路径 -->
</filter-mapping>
1.3 过滤器处理字符乱码
Filter代码
/**
* GET:
请求:
Tomcat8及以上,不需要处理
Tomcat7及以下,需要处理乱码
new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
响应:
response.setContentType("text/html;charset=UTF-8");
POST:
请求:
Tomcat8及以上,需要处理乱码,request.setCharacterEncoding("UTF-8");
Tomcat7及以下,需要处理乱码,request.setCharacterEncoding("UTF-8");
响应:
response.setContentType("text/html;charset=UTF-8");
* @author Cushier
*
*/
public class EncodeFilter implements Filter {
@Override
public void init(FilterConfig fConfig) throws ServletException {