一:设置Post编码

post请求接收中文,需要在Servlet里写上 request.setCharacterEncoding("UTF-8"); 否则默认以iso-8859-1编码,中文显示乱码:web考题.doc,在每个Servlet里都写这句话,有点麻烦。

通过过滤器,统一设置post编码:

  写一个过虑器,对所有url全部过虑,/*.在doFilter方法中,设置request的编码为utf-8。

  一般情况下,这个过虑器永远是第一个要执行的过虑器。

  最好是通过配置设置编码。这样修改方便<filter><init-param>…

第一步:实现Filter接口,在doFIlter中接收初始化参数,设置编码

java代码

public class CharFilter implements Filter {
//声明编码的成员变量
private String encoding;
public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("bm");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);

    //设置响应编码,否则,默认为iso-8859-1,jsp展示中文乱码
    response.setContentType("text/html;charset=" + encoding);

//放行,必须要放行。
chain.doFilter(request, response);
}
public void destroy() {
}
}

第二步:将上面的类配置到web.xml

<!-- 编码过滤器 -->
<filter>
<filter-name>char</filter-name>
<filter-class>com.lhy.filter.CharFilter</filter-class>
<init-param>
<!-- 设置编码 -->
<param-name>bm</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>char</filter-name>
<!-- 对所有url过滤 -->
<url-pattern>/*</url-pattern>
</filter-mapping>

测试:request接收参数:  web考题.doc ,中文正常显示。

二:Get设置编码

在CharFilter中对reuqest进行包装。

目的:修改增强getParameter方法,如果是get转码。

第一步:声明包装类:

/**
* 对get可以处理中文
* 声明包装类
* 在CharFilter中对reuqest进行包装。
* 目的:修改增强getParameter方法,如果是get转码。
*/
public class MyRequest extends HttpServletRequestWrapper { public MyRequest(HttpServletRequest request) {
super(request);
}
//增强getParamter
@Override
public String getParameter(String name) {
String val = super.getParameter(name);
if(super.getMethod().equals("GET")){
try {
val = new String(val.getBytes("ISO-8859-1"),super.getCharacterEncoding());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return val;
}
}

第二步:在doFilter方法中,声明包装类的实例

public class CharFilter implements Filter{

  //声明编码的成员变量
private String encoding; @Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("bm");
} @Override
public void destroy() {
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encoding);
//设置响应编码,否则,默认为iso-8859-1,jsp展示中文乱码
response.setContentType("text/html;charset=" + encoding);
// 判断是否需要包装
HttpServletRequest req = (HttpServletRequest)request;
if(req.getMethod().equals("GET")){
request = new MyRequest(req);//实例化包装类。
}
//放行,必须要放行。
chain.doFilter(request, response);
} }

test:

<a href="CharServlet?pwd=阿斯达">get</a>   req.getParameter("pwd");--阿斯达

过虑器应用之1-设置request编码的更多相关文章

  1. 过虑器 ThreadLocal 权限 监听器 观察者模式

    数据的压缩 GzipOutputStream - > > ByteArrayOutputStream. 以下是在某个servlet中对指定的数据进行压缩 package cn.itcast ...

  2. 异步Servlet和异步过虑器

    异步处理功能可以节约容器线程.此功能的作用是释放正在等待完成的线程,是该线程能够被另一请求所使用. 要编写支持异步处理的 Servlet 或者过虑器,需要设置 asyncSupported 属性为 t ...

  3. Tomcat 中文乱码 设置UTF-8编码 问题解决办法

    在Java Web开发中,http请求带有中文字符的URI如果不处理容易出现乱码问题:这是因为Tomcat容器默认编码是iso-8859-1引起的,因此要避免出现乱码就要需要做相应的处理.解决办法如下 ...

  4. java—过虑器基础(47)

    在web项目中就只有三大组件: Filter过虑器 监听器. Servlet 在web中过虑器就是一个类javax.servlet.Filter. 过虑器是用于在执行时,过虑用户的请求(request ...

  5. spring设置字符编码过滤器

    一.在web.xml中的配置 <!-- characterEncodingFilter字符编码过滤器 --> <filter> <filter-name>chara ...

  6. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_16-网关-过虑器

    4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等. 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖 ...

  7. response ,request编码

    request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...

  8. Java基于Servlet过虑器

  9. Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向

    Day35  Response 1.1.1 ServletContext概念 u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象. 1.1.2  ...

随机推荐

  1. golang闭包里的坑

    介绍 go的闭包是一个很有用的东西.但是如果你不了解闭包是如何工作的,那么他也会给你带来一堆的bug.这里我会拿出Go In Action这本书的一部分代码,来说一说在使用闭包的时候可能遇到的坑.全部 ...

  2. 安装及使用Eclipse Maven插件的经验

    Eclipse Maven插件的站点目前已经迁移到了Eclipse主站上:http://eclipse.org/m2e/ 其安装方法也非常简单,通过Eclipse访问下面的URL:http://dow ...

  3. 测试一下你的T-SQL基础知识-subquery

    一直以为自己SQL挺好的,没有想到今天在重构存储过程遇到了一个子查询的问题,修改为自连接之后发现居然结果不对,于是有了下面的测试.假设表中有如下数数据,请问Query1,Query2,Query3的查 ...

  4. radom

    radom模块提供了随机生成对象的方法 Help on module random: NAME random - Random variable generators. FILE /usr/local ...

  5. 学习Spring Data JPA

    简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊 ...

  6. TempDB--临时表的缓存

    --========================================================================== 在博客园看到一篇文章<SQLServer ...

  7. 转载:R语言rvest包使用

    R中有好几个包都可以抓取网页数据,但是rvest + CSS Selector最方便. 通过查看器立刻知道表格数据都在td:nth-child(1),td:nth-child(3)之类的节点中,直接代 ...

  8. WinForm如何去掉右边和下边的白边

    系统给的窗体样式都缺乏美感,想要漂亮的UI只能自己做,很容易实现 1.新建窗体,设置FormBorder为None 这时的窗体就只有一个Panel(Form自带的默认Panel),没有边框,没有标题栏 ...

  9. Python关于PIL库的学习总结与成果展示

    一.关于PIL库的学习总结 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装.安装PIL库的方法如下,需要注意,安装库的名字是pillow. : ...

  10. SpringBoot入门之分散配置

    springboot默认支持两种格式的配置文件:.properties和.yml.其中.properties是属性文件,也是最常用的一种:.yml是yaml格式的文件,yaml是一种简洁的标记语言.例 ...