zoukankan      html  css  js  c++  java
  • chain.doFilter(request,response)

    这句话的真正意思,我到现在才体会出来。
    他的作用是将请求转发给过滤器链上下一个对象。这里的“下”指的是哪里 ?
    值得是下一个filter,如果没有filter那就是你请求的资源。 
    一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起 
    request -> filter1 -> filter2 ->filter3 -> .... -> request resource.
     
    下面举一个例子:
    input.jsp是用来提交输入的,当提交后,过滤器检测姓名和年龄,如果整常的话会提交给output.jsp,如果不正常提交给erroroutput.jsp.在此同时也有一个过滤器,它是用来检测一个页面是否设置了字符编码,如果没有则进行设置。(防止乱码问题存在)。
    myfilter.java
    ======================
    package servletbean;
    import javax.swing.JOptionPane;
    public class myfilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    response.setContentType("text/html");
    response.setCharacterEncoding("GB2312");
    PrintWriter out=response.getWriter();
    String name="";
    String age="";
    int age1;
    name=request.getParameter("name");
    age=request.getParameter("age");
    RequestDispatcher dispatch=request.getRequestDispatcher("erroroutput.jsp"); if(name==null||name==""||name==" "||age==null)
    {
    JOptionPane.showMessageDialog(null,"用户名和年龄输入错误!");
    dispatch.forward(request, response);
    return;
    }
    else
    {
    try
    {
    age1=Integer.parseInt(age);
    }
    catch(Exception e)
    {
    //JOptionPane.showMessageDialog(null,"年龄必须为数字!");
    dispatch.forward(request,response);
    return;//如果是错误页面就到erroroutput.jsp中
    }
    }
    chain.doFilter(request, response);//这里表示是正确的,也就是说,他回去找下一个链,但是旗下面已经没有了,所以就会去跳转页面了,此时要跳转的页面就是action="output.jsp"了。
    }
    }
    ==================
    encodefilter.java
    ===================
    package servletbean;
    public class encodefilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if(request.getCharacterEncoding()==null)
    {
    System.out.println(encoding);
    request.setCharacterEncoding(encoding);
    }
    chain.doFilter(request, response);//到下一个链
    }
    public void init(FilterConfig fConfig) throws ServletException {
    this.config=fConfig;
    encoding=fConfig.getInitParameter("encoding");
    }
     
    }
    ==============
    input.jsp
    ==============
    <form action="output.jsp" name="form" method="post">
    <table>
    <tr>
    <td>name</td>
    <td><input type="text" name="name" /></td>
    </tr>
    <tr>
    <td>age</td>
    <td><input type="text" name="age"/></td>
    </tr>
    <tr>
    <td>
    <input type="submit" name="ok" value="ok"/>
    </td>
    </tr>
    </table>
    </form>
    ================
    web.xml
    ===============
    注意:filter是有顺序的
    <filter>
    <description>
    </description>
    <display-name>
    encodefilter</display-name>
    <filter-name>encodefilter</filter-name>
    <filter-class>servletbean.encodefilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GB2312</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>encodefilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
    <description>
    </description>
    <display-name>
    myfilter</display-name>
    <filter-name>myfilter</filter-name>
    <filter-class>servletbean.myfilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>myfilter</filter-name>
    <url-pattern>/output.jsp</url-pattern>
    </filter-mapping>
  • 相关阅读:
    Android为TV端助力:adb查找包名位置
    Android为TV端助力:RecyclerView更新数据时焦点丢失
    一个IOS自动化打包的脚本
    关于IOS免证书真机安装的过程和问题
    使用CoreAnimation 实现相机拍摄照片之后动画效果
    解决路由器无线中继连接不稳定的问题
    解决 an app id with identifier is not available. please enter a different string. xcode 7.3
    CoreText 关键性常用函数说明
    解决Xcode 7 http无法使用的问题
    解决IOS9 下在App中无法打开其他应用的问题
  • 原文地址:https://www.cnblogs.com/yony/p/2718015.html
Copyright © 2011-2022 走看看