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

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

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


过滤器:

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

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException; @WebFilter(filterName = "TestFilter2",urlPatterns = "/*")
public class TestFilter2 implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } }

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

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

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

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

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

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

chain.doFilter(req, resp);

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

 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//这样在每个Servlet执行的时候都会先进行这个
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
//注意 这一行代码一定要写到最后
chain.doFilter(req, resp);
}

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

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

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

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

 import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException; /**
* urlPatterns代表的是需要将那些路径进行过滤器过滤 这里为* 代表所有的路径都需要进入这个过滤器
*/
@WebFilter(filterName = "TestFilter",urlPatterns = "/*")
public class TestFilter implements Filter {
public void destroy() {
} /**
* 在这里面写的任何代码 在执行Servlet JSP 等前 都会被执行
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//这样在每个Servlet执行的时候都会先进行这个
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
//注意 这一行代码一定要写到最后
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } //通过重写getParameter方法,实现get方法自动转码
class MyWrapper extends HttpServletRequestWrapper{
private HttpServletRequest request;
public MyWrapper(HttpServletRequest request) {
super(request);
this.request = request;
} @Override
public String getParameter(String name) {
String value = this.request.getParameter(name);
if(value == null){
return null;
} //如果是get方法提交过来的
if(this.request.getMethod().equalsIgnoreCase("get")){
try {
// 进行转码
value = new String(value.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} //屏蔽尖括号 换成 > <
value = value.replace(">",">");
value = value.replace("<","&lt;"); return value;
}
}
}

JAVA过滤器的使用(Filter)的更多相关文章

  1. java过滤器Filter笔记

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...

  2. java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例

    java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...

  3. Java过滤器Filter

    过滤器 一. 简介 过滤器一般用于设置字符编码.登录验证.权限验证.敏感词过滤等,减少了代码的冗余,便于代码的复用,但是不一定是每个servlet都必须使用过滤器的. 二. 过滤器的工作流程 图片来源 ...

  4. java 过滤器

    1.什么是过滤器?  过滤信息,执行的优先级高于 servlet 2.自定义过滤器的步骤 写一个普通java类,实现Filter接口 2.配置过滤器  web.xm中 import java.io.I ...

  5. Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解 【转】

     过滤器 1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请 ...

  6. 理解Servlet过滤器 (javax.servlet.Filter)

    过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响应送给客户端之前,过滤器截获响 ...

  7. Java 过滤器的作用

    Servlet API 非常久曾经就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充.在 J2EE 探索者 系列文章的最后一篇中,作者 Kyle Gabhar ...

  8. 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  9. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

随机推荐

  1. Linux下分布式系统以及CAP理论分析

    CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区,那么什么是CAP理论呢?CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他 ...

  2. UVA - 116 Unidirectional TSP 多段图的最短路 dp

    题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...

  3. [what is machine learning?]

    1.2 [what is machine learning?] 1.人:observation -->  learing  -->  skill 机器:data --> ML --& ...

  4. <<浪潮之巅>>阅读笔记三

    纵看世界,横看国内.我们国内也有很多很优秀的企业正在走向或者已经处于浪潮之巅.阿里巴巴.腾讯和百度这三巨头应该是我们计算机行业的龙头.但是 不得不说,在创新方面我们做的并不多,这是值得每一个从事计算机 ...

  5. JavaScript的类、对象、原型、继承、引用

    以CSS为例,有一种为所有class为"xxxx"的元素添加样式(外联样式),那么所有class为xxx的元素样式就会改变,在css中像下面这么写: <html> &l ...

  6. Java使用HTTPClient3.0.1开发的公众平台消息模板的推送功能

    package com.company.product.manager.busniess.impl; import java.io.IOException;import java.nio.charse ...

  7. Linux 忘记root密码

    1 将系统重启,读秒的时候按下任意键就会出现如下图菜单界面 2 进入上图菜单界面之后,按e键就可以进入grub的编辑模式 3 选择第二行 kernel开头,再按 e 键进入该行的编辑界面中,然后在出现 ...

  8. const修饰符与函数

    一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...

  9. Jquery 组 checkbox全选checkbox

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  10. 如何实现圆形的进度条(ProgressBar)

    在我们实际的工作中可能经常使用到圆形的进度条,但是这是怎么实现的呢?其实这只不过是修改了一下ProgressBar的模板,我们在下面的代码中我们将ProgressBar的Value值绑定到Border ...