• 过滤器的使用


           开发人员从创建一个或多个实现javax.servlet.Filter 接口的java类开始,这些类可以再servlet请求处理之前采取一些动作,换句话说,它先于与之相关的servlet或jsp页面运行于服务器上。在请求发送到其目标之前创建一系列动作(包括完全阻塞请求)。把不要的东西挡住,要的东西留向目标。

           在Servlet作为过滤器使用时,它可以对客户的请求进行处理、处理完成后,他会交给下一个过滤器处理这样,客户的请求在过滤器链里逐个处理,直到请求发送到目标为止。

           过滤器API中包含3个简单的接口 FIlter、FilterChain、FilterConfig。

            过滤器类实现Filter 接口,然后使用这个过滤器类中的FilterChain 和FilterConfig 接口。该过滤器类的一个引用将传递给FilterChain对象,以允许过滤器把控制权传递给链中的下一个资源。FilterConfig 对象将容器提供给过滤器,以允许访问该过滤器的初始化数据。

            在web.xml中使用filter和filter-mapping元素关联过滤器和servlet。

    运用过滤器设置编码格式:

    Servlet:

     1 import java.io.IOException;
     2 import java.io.PrintWriter;
     3 
     4 import javax.servlet.ServletException;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 public class MyServlet extends HttpServlet {
    10 
    11     public void doGet(HttpServletRequest request, HttpServletResponse response)
    12             throws ServletException, IOException {
    13            doPost(request, response);
    14     }
    15 
    16     public void doPost(HttpServletRequest request, HttpServletResponse response)
    17             throws ServletException, IOException {
    18             PrintWriter out=response.getWriter();
    19             out.print("hello Filter");
    20     }
    21 
    22 }

    Filter:

     1 import java.io.IOException;
     2 
     3 import javax.servlet.Filter;
     4 import javax.servlet.FilterChain;
     5 import javax.servlet.FilterConfig;
     6 import javax.servlet.ServletException;
     7 import javax.servlet.ServletRequest;
     8 import javax.servlet.ServletResponse;
     9 
    10 public class MyFilter implements Filter {
    11     private static String CODE="utf-8";
    12     @Override
    13     public void destroy() {
    14 
    15     }
    16 
    17     @Override
    18     public void doFilter(ServletRequest arg0, ServletResponse arg1,
    19             FilterChain arg2) throws IOException, ServletException {
    20             System.out.println(" Do Filter..");
    21             arg0.setCharacterEncoding(CODE);
    22             arg1.setCharacterEncoding(CODE);
    23             arg2.doFilter(arg0, arg1);
    24     }
    25 
    26     @Override
    27     public void init(FilterConfig arg0) throws ServletException {
    28 
    29     }
    30 
    31 }

    XML:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
     3   <display-name>Test</display-name>
     4   <servlet>
     5     <servlet-name>MyServlet</servlet-name>
     6     <servlet-class>test.MyServlet</servlet-class>
     7   </servlet>
     8   <servlet-mapping>
     9     <servlet-name>MyServlet</servlet-name>
    10     <url-pattern>/MyServlet</url-pattern>
    11   </servlet-mapping>
    12   <filter>
    13   <filter-name>MyFilter</filter-name>
    14   <filter-class>test.MyFilter</filter-class>
    15   </filter>
    16   <filter-mapping>
    17   <filter-name>MyFilter</filter-name>
    18   <servlet-name>/MyServlet</servlet-name>
    19   <url-pattern>/MyFilter</url-pattern>
    20   </filter-mapping>
    21   <welcome-file-list>
    22     <welcome-file>index.jsp</welcome-file>
    23   </welcome-file-list>
    24 </web-app>

           在部署文件中使用flter-mapping元素将每个过滤器映射到Servlet,这些过滤器将按照特闷在部署文件中出现的顺序应用于该Servlet。

    为过滤器配置初始化参数:

         使用filter元素的init-param子元素来声明初始化参数及其值。在过滤器中通过调用FilterConfig对象的getInitParameter方法访问参数。

    改进编码过滤器:

     1 import java.io.IOException;
     2 
     3 import javax.servlet.Filter;
     4 import javax.servlet.FilterChain;
     5 import javax.servlet.FilterConfig;
     6 import javax.servlet.ServletException;
     7 import javax.servlet.ServletRequest;
     8 import javax.servlet.ServletResponse;
     9 
    10 public class MyFilter implements Filter {
    11 
    12     public MyFilter() {
    13         // TODO Auto-generated constructor stub
    14     }
    15 
    16     @Override
    17     public void destroy() {
    18         // TODO Auto-generated method stub
    19 
    20     }
    21 
    22     @Override
    23     public void doFilter(ServletRequest arg0, ServletResponse arg1,
    24             FilterChain arg2) throws IOException, ServletException {
    25           System.out.println(" Do Filter..");
    26           arg2.doFilter(arg0, arg1);
    27     }
    28 
    29     @Override
    30     public void init(FilterConfig arg0) throws ServletException {
    31         // TODO Auto-generated method stub
    32     String CODE = arg0.getInitParameter("CODE");
    33     }
    34 
    35 }
    1   <filter>
    2          <filter-name>MyFilter</filter-name>
    3          <filter-class>test.MyFilter</filter-class>
    4          <init-param>
    5               <param-name>CODE</param-name>
    6               <param-value>UTF-8</param-value>
    7          </init-param>
    8   </filter>
  • 相关阅读:
    Swift学习笔记4
    《将博客搬至CSDN》
    传入一个integer数组,取出最大、最小值
    Centos7下完美安装并配置mysql5.6
    linux常用命令总结
    centos7下安装配置redis3.0.4
    VMware下centos桥接模式静态ip配置
    解决centos7下tomcat启动正常,无法访问项目的问题
    centos7系统下安装配置jdk、tomcat教程
    Apache+Tomcat+mod_jk实现负载均衡
  • 原文地址:https://www.cnblogs.com/the-wang/p/7535712.html
Copyright © 2020-2023  润新知