JavaWeb过滤器(链)以及案例

清疚 2023-06-07 10:35 47阅读 0赞

作用:

对服务器接受的请求资源和响应给游览器的资源进行管理。
保护servlet

使用:

> 创建一个实现了Filter接口的普通java类。
覆写接口的方法:init方法,doFilter方法,destory方法。
> 调用FilterChain.doFilter方法进行拦截和放行操作

  1. @Override
  2. public void doFilter(ServletRequest arg0, ServletResponse arg1,
  3. FilterChain arg2) throws IOException, ServletException {
  4. // TODO Auto-generated method stub
  5. System.out.println("请求已拦截");
  6. arg2.doFilter(arg0, arg1);//放行
  7. System.out.println("请求已响应");
  8. }

注意:如果只拦截请求,不放行则arg2.doFilter(arg0, null);

> 在web.xml中配置过滤器

  1. <!--配置过滤器 -->
  2. <filter>
  3. <filter-name>AddStudentServlet</filter-name>
  4. <filter-class>org.threetierarc.filter.AccessFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>AddStudentServlet</filter-name>
  8. <url-pattern>/add.jsp</url-pattern>
  9. <dispatcher>???????????</dispatcher>
  10. </filter-mapping>

> 在web.xml中可以写多个:
REQUEST:拦截HTTP请求 get post
FORWARD:只拦截 通过 请求转发方式的请求
INCLUDE:只拦截拦截通过 request.getRequestDispatcher(“”).include() 、通过此种方式发出的请求
ERROR:只拦截发出的请求

注意:结合重定向、请求转发结合来理解其作用

>配置过滤器链
过滤器链可以配置多个过滤器,过滤器的先后顺序 是由 的位置 决定。
如下配置:先运行MyFilter2,在运行MyFilter1

  1. <filter>
  2. <filter-name>MyServlet</filter-name>
  3. <filter-class>org.student.filter.MyFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>MyFilter2</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>
  9. <filter-mapping>
  10. <filter-name>MyServlet</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. <dispatcher>REQUEST</dispatcher>
  13. <dispatcher>FORWARD</dispatcher>
  14. </filter-mapping>
  15. <filter>
  16. <filter-name>MyFilter2</filter-name>
  17. <filter-class>org.student.filter.MyFilter2</filter-class>
  18. </filter>

案例:
1)统一编码
2)session管理
3)权限管理
4)资源管理(统一水印、和谐词汇等)

统一编码:

  1. @Override
  2. public void doFilter(ServletRequest arg0, ServletResponse arg1,
  3. FilterChain arg2) throws IOException, ServletException {
  4. //设置编码格式
  5. arg0.setCharacterEncoding("utf-8");
  6. arg1.setContentType("text/html;charse=utf-8");
  7. //放行
  8. arg2.doFilter(arg0, arg1);
  9. }

session管理:

  1. @Override
  2. public void doFilter(ServletRequest arg0, ServletResponse arg1,
  3. FilterChain arg2) throws IOException, ServletException {
  4. //判断session
  5. HttpSession hs=((HttpServletRequest)arg0).getSession();
  6. if(hs.getAttribute("user")==null){
  7. ((HttpServletResponse)arg1).sendRedirect("/login.jsp");
  8. }else{
  9. arg2.doFilter(arg0, arg1);
  10. }
  11. }

发表评论

表情:
评论列表 (有 0 条评论,47人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javaweb——过滤器

    过滤器 作用 ​ 实现对web资源请求的拦截,完成特殊的操作,尤其是对请求的预处理。 应用场景 Web资源权限访问控制 字符集编码处理 内容敏感字