java filter chain_Java filter中的chain.doFilter详解

转载:

一.chain.doFilter作用

1.一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起

request -> filter1 -> filter2 ->filter3 -> …. -> request resource.

2.chain.doFilter将请求转发给过滤器链下一个filter , 如果没有filter那就是你请求的资源

二.举例

input.jsp 是用来提交输入的 : 当提交后,过滤器检测姓名和年龄 .

如果正常的话会提交给output.jsp 如果不正常提交给erroroutput.jsp.

在此 , 同时也有一个过滤器,防止乱码问题存在 , 该过滤器检测一个页面是否设置了字符编码,如果没有则进行设置。

1.input.jsp

48304ba5e6f9fe08f3fa1abda7d326ab.png

name
age

48304ba5e6f9fe08f3fa1abda7d326ab.png

2.web.xml

48304ba5e6f9fe08f3fa1abda7d326ab.png

encodefilter

encodefilter

servletbean.encodefilter

encoding

GB2312

encodefilter

/*

myfilter

myfilter

servletbean.myfilter

myfilter

/output.jsp

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.encodefilter.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

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");//获得目标编码格式

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.myfilter.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

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中

}

}

//这里表示是正确的,也就是说,他回去找下一个链,但是它下面已经没有了,所以就会去跳转页面了,此跳转的页面就是action="output.jsp"了

chain.doFilter(request, response);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

转载地址:http://blog.csdn.net/haofengjiao/article/details/70186381

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值