一个完整的jsp请求响应流程可以简单的使用下图表示:
过滤器:直观的了解,就是对请求做一个过滤作用,比如身份验证,验证不通过的不让他继续往下走
Servlet:请求处理中心,这个也是我们写业务逻辑的地方
JSP:页面
从上面的图可以了解到,当接收到一个请求时,它会先被过滤器刷一遍,这一步可以理解为对请求进行一些预处理,如字符编码,身份验证等等,如果满足条件就放行,否则重定向到其它页面(如异常页面),而那些放行的请求,会进一步去访问它们需要的资源
一、过滤器(Filter)
过滤器是一个类,通常它的作用可以总结为两点:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应。
过滤器是一个类,当然我们就可以自定义过滤器了,如下,我们定义一个过滤器:
package demo; 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 MyFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub System.out.println("MyFilter:destroy"); } @Override public void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("MyFilter:Do Somethind Before"); paramFilterChain.doFilter(paramServletRequest, paramServletResponse);//放行进入下一个过滤器 System.out.println("MyFilter:Do Somethind After"); } @Override public void init(FilterConfig paramFilterConfig) throws ServletException { // TODO Auto-generated method stub System.out.println("MyFilter:init"); } }