Java_servlet_ 过滤器
过滤器:
原理:
在用户的浏览器和服务器之间添加一个过滤器,用户请求经过相对应的过滤器。
作用:
可以对浏览器的请求进行统一编码,以及获取session中的数据,或者对请求数据进行过滤。
过滤器配置:
<!--第一种过滤器配置:可以拦截所有的浏览器请求("/*")-->
<filter>
<filter-name>Myfilter</filter-name>
<filter-class>MyFilter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--第二种过滤器配置:可以拦截部分的以("*.do")浏览器请求("*.do")-->
<filter>
<filter-name>Myfilter</filter-name>
<filter-class>MyFilter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Myfilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!--第三种过滤器配置:可以拦截指定浏览器请求("/test.do")-->
<filter>
<filter-name>Myfilter</filter-name>
<filter-class>MyFilter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Myfilter</filter-name>
<url-pattern>/test.do</url-pattern>
</filter-mapping>
注意:
当同时配置三种过滤器的时候,三种过滤器都要进行工作,顺序为:第一种 —>第二种 —>第三种
过滤器的方法复写和生成:
public class Myfilter implements Filter{
//过滤器的销毁
public void destroy() {
System.out.println("我被销毁了!");
}
//过滤器的执行
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("我被执行了!");
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//判断session
HttpSession hs=((HttpServletRequest)request).getSession();
if(hs.getAttribute("user")==null)
((HttpServletResponse)response).sendRedirect("a.jsp");//重定向到 a.jsp 文件
else
//处理完后,过滤器放行,浏览器的请求放行给服务器
chain.doFilter(request,response);
System.out.println("我被执行了2!");
}
//过滤器的生成
public void init(FilterConfig arg0) throws ServletException {
System.out.println("我被初始化了!");
}
}
过滤器的运行轨迹:
过滤器生命周期:
服务器开启到服务器结束,当服务器关闭后,过滤器才会执行销毁方法。
注意:
当过滤器放行后,还会接着往下执行
//过滤器的执行
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("我被执行了!");
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request,response); //这里是放行给服务器,我的Servlet里写的是(System.out.println("我是Servlet!*****************************");)
System.out.println("我被执行了2!");
}
程序截图: