csdn 过滤器篇:https://blog.csdn.net/u011024652/article/details/52186200
过滤器的使用:
* 作用:
* 对服务器接收的请求资源和响应浏览器的资源进行管理
* 保护servlet
* 使用:
* 创建一个实现了Filter 接口的普通java类
* 覆写接口方法:
* init(), 服务器启动即执行,资源初始化。
* doFilter() ,拦截请求的方法,在此方法中可以实现对资源的管理
* 注意:需要手动进行放行,.chain.doFilter(request,response);
* destroy() ,服务器关闭时执行,
* 在Web.xml 文件中 配置 过滤器:
* <filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.wxh.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
* 注意:url-pattern : /* 拦截所有的请求;
* url-pattern : *.do 拦截所有以 .do 结尾的请求,一般是用来进行模块拦截处理;
* url-pattern : /ts 表示拦截指定url 的请求,针对某个 servlet 的请求,保护 servlet;
*
* 过滤器的生命周期: 服务器启动 到 服务器关闭;
*
* 总结:
* 过滤器 程序员声明和配置,服务器根据请求中的 uri 信息调用;
* 执行:
* 浏览器发起请求到服务器,服务器收到请求后,根据 URI 信息在web.xml中找到对应的
* 过滤器 执行 doFilter 方法,该方法对此次请求进行处理后如果符合要求则放行,放行
* 后如果还有符合要求的过滤则继续过滤,找到执行对应的servlet 进行请求处理,servlet
* 对请求处理完毕后,也就是service 方法结束了,还需继续返回相应的doFilter 方法继续执行。
*
* 案例:
* 统一编码格式设置。
* session 管理
* 权限管理
* 资源管理(统一水印,和谐词汇 等)
过滤器:
public class MyFilter implements Filter {
public void destroy() {
System.out.println("MyFilter.destroy(我被销毁了)");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("MyFilter.doFilter(我被执行了,开始过滤)");
//设置响应编码:
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/login.jsp");
}else{
//放行
chain.doFilter(request, response);
}
System.out.println("MyFilter.doFilter(我被执行了2,过滤结束)");
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("MyFilter.init(我被初始化了)");
}
}
package com.wxh.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter2 implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("MyFilter2.doFilter(我是第二个拦截器)");
//放行
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
servlet:
package com.wxh.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class servletTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求格式
//设置响应格式
//获取请求信息
//处理请求信息
System.out.println("servletTest.service(我是servlet)");
//响应请求信息
}
}
配置web.xml
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.wxh.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置第二个拦截器 -->
<filter>
<filter-name>MyFilter2</filter-name>
<filter-class>com.wxh.filter.MyFilter2</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 配置第三个拦截器 -->
<filter>
<filter-name>MyFilter3</filter-name>
<filter-class>com.wxh.filter.MyFilter3</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter3</filter-name>
<url-pattern>/st.do</url-pattern>
</filter-mapping>