过滤器的引入

过滤器
一、基本概念(3W1H: why, what, where,how)
1、为什么需用到过滤器?
项目开发中,经常会涉及到重复代码的实现!
注册 —- Servlet 【1. 设置编码】 —- JSP
修改 —-Servlet 【1. 设置编码】 — JSP
其他
如判断用户是否登陆,只有登陆才能有操作权限!
涉及到重复判断: 获取session,取出session数据,判断是否为空,为空说明没有登陆,不能操作; 只有登陆后,才能操作!

2、如何解决:
1)抽取重复代码,封装。
2)每个用到重复代码的地方,手动的调用。

有什么更好的方法没有,可以自动调用?——引入过滤器!

二、过滤器,设计执行流程:
1、用户访问服务器
2、过滤器: 对Servlet请求进行拦截
3、先进入过滤器, 过滤器处理
4、过滤器处理完后, 再放行, 此时,请求到达Servlet/JSP
5、Servlet处理
6、Servlet处理完后,再回到过滤器, 最后在由tomcat服务器响应用户;

三、简单实现一个过滤器HelloWorld,并了解下带有过滤器的Servlet项目的执行顺序
Javax.servlet.*;
|– interface Filter 及过滤器

1、开发步骤:
1)写一个普通java类,实现Filter接口
2)配置过滤器

2、执行顺序:
1)HelloFilter.java

package sram.filter;
import java.io.IOException;
/*
 * Filter来自servlet所以说Filter也是Servlet
 */
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import com.sun.net.httpserver.Filter.Chain;

public class HelloFilter implements Filter{
    public HelloFilter(){
        System.out.println("1.过滤器对象被创建了!");
    }   
    public void init(FilterConfig filterconfig) throws ServletException {
        System.out.println("2.执行过滤器初始化方法!");
    }
    // 过滤器业务处理方法: 在请求到达servlet之前先进入此方法处理公用的业务逻辑操作
    public void doFilter(ServletRequest servletrequest,
            ServletResponse servletresponse, FilterChain filterchain)
            throws IOException, ServletException {
        System.out.println("3.执行过滤器业务处理方法!");
        //放行 (去到Servlet)
        filterchain.doFilter(servletrequest,servletresponse);
        System.out.println("5. Servlet处理完成,又回到过滤器");
    }
    public void destroy() {
        System.out.println("6.销毁过滤器!");
    }   
}

2)HelloServlet.java

package sram.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("4.执行Servlet中程序");
    }
}

3)web.xml

<!--过滤器配置  -->
  <filter>
    <!--内部名称  -->
    <filter-name>HelloFilter</filter-name>
    <!--过滤器类的全名  -->
    <filter-class>sram.filter.HelloFilter</filter-class>
  </filter>
  <filter-mapping>
    <!--filter内部名称  -->
    <filter-name>HelloFilter</filter-name>
    <!--拦截所有资源  -->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>sram.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>    

4)执行过程:

四、多个过滤器的执行情况:

五、过滤器执行的时序图:
OOAD(面向对象的分析与设计),可以使用RationRose 画出时序图分析:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值