过滤器的java代码_JAVA过滤器的使用(Filter)

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

这是在Servlet里面设置字符编码的代码,但是通常情况下Servlet不止一个,所以我们需要在每一个Servlet中都写上上面的代码,这样的话,不仅麻烦,而且容易搞混淆。

所以我们对于这类多个Servlet中会执行相同的代码的时候,我们通常可以使用过滤器来帮我们完成操作:

过滤器:

如果想要使用过滤器,首先需要实现Filter类,并重写三个需要的方法:

import javax.servlet.*;importjavax.servlet.annotation.WebFilter;importjava.io.IOException;

@WebFilter(filterName= "TestFilter2",urlPatterns = "/*")public class TestFilter2 implementsFilter {public voiddestroy() {

}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throwsServletException, IOException {

chain.doFilter(req, resp);

}public void init(FilterConfig config) throwsServletException {

}

}

init方法:    容器在创建当前过滤器的时候自动调用;

destroy方法:  容器在销毁当前过滤器的时候自动调用

doFilter方法:  过滤器的主要代码写在这个地方

1 @WebFilter(filterName = "TestFilter2",urlPatterns = "/*")

这一行代码的意思是添加一个注解,通过这行代码就不需要再去web.xml中注册了

其中 filterName 代表的是这个过滤器的名字,后面那个urlPatterns 代表的是过滤的路径 /* 代表所有路径,意味着访问所有的路径的时候都会先访问这个过滤器

chain.doFilter(req, resp);

这一行代码代表的是如果还有其他的过滤器就调用其它的过滤器,但是需要注意,这一行代码必须写在doFilter方法的最后面

1 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throwsServletException, IOException {2 //这样在每个Servlet执行的时候都会先进行这个

3 HttpServletRequest request =(HttpServletRequest) req;4 HttpServletResponse response =(HttpServletResponse) resp;5

6 request.setCharacterEncoding("utf-8");7 response.setContentType("text/html;charset=utf-8");8

9 //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行10 //注意 这一行代码一定要写到最后

11 chain.doFilter(req, resp);12 }

其中3-7行代码就是设置编码

由于doFilter传递进来的默认是ServletRequest对象 而设置字符集的是在HttpServetRequest 所以我们需要强制转换一下

转换过后我们就可以进行设置了。

下面附上我另外一个测试过滤器的代码:

1 import javax.servlet.*;2 importjavax.servlet.annotation.WebFilter;3 importjavax.servlet.http.HttpServletRequest;4 importjavax.servlet.http.HttpServletRequestWrapper;5 importjavax.servlet.http.HttpServletResponse;6 importjava.io.IOException;7 importjava.io.UnsupportedEncodingException;8

9 /**

10 * urlPatterns代表的是需要将那些路径进行过滤器过滤 这里为* 代表所有的路径都需要进入这个过滤器11 */

12 @WebFilter(filterName = "TestFilter",urlPatterns = "/*")13 public class TestFilter implementsFilter {14 public voiddestroy() {15 }16

17 /**

18 * 在这里面写的任何代码 在执行Servlet JSP 等前 都会被执行19 */

20 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throwsServletException, IOException {21 //这样在每个Servlet执行的时候都会先进行这个

22 HttpServletRequest request =(HttpServletRequest) req;23 HttpServletResponse response =(HttpServletResponse) resp;24

25 request.setCharacterEncoding("utf-8");26 response.setContentType("text/html;charset=utf-8");27

28 //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行29 //注意 这一行代码一定要写到最后

30 chain.doFilter(req, resp);31 }32

33 public void init(FilterConfig config) throwsServletException {34

35 }36

37 //通过重写getParameter方法,实现get方法自动转码

38 class MyWrapper extendsHttpServletRequestWrapper{39 privateHttpServletRequest request;40 publicMyWrapper(HttpServletRequest request) {41 super(request);42 this.request =request;43 }44

45 @Override46 publicString getParameter(String name) {47 String value = this.request.getParameter(name);48 if(value == null){49 return null;50 }51

52 //如果是get方法提交过来的

53 if(this.request.getMethod().equalsIgnoreCase("get")){54 try{55 //进行转码

56 value = new String(value.getBytes("ISO-8859-1"),"utf-8");57 } catch(UnsupportedEncodingException e) {58 e.printStackTrace();59 }60 }61

62 //屏蔽尖括号 换成 > <

63 value = value.replace(">",">");64 value = value.replace("

66 returnvalue;67 }68 }69 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值