一:设置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. struts2 file

    JavaBean 中: private File[] pic; private String[] picContentType; private String [] picFileName; sett ...

  2. WriteableBitmap(一)

    通常,WPF中的位图是不可变的.不可变的位图非常有效,如果您希望进行大量的动态更改,创建和销毁它们的开销会变得非常昂贵.在这种情况下,您需要一些更灵活的东西——WriteableBitmap. Wri ...

  3. Reactor 模式在Netty中的应用

    Reactor 模式在Netty中的应用 典型的Rector模式 mainReactor 服务端创建成功后,会监听Accept操作,其中ServerSocketchannel中的PipeLine中现在 ...

  4. hdu4417(Super Mario)—— 二分+划分树

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. Hibernate中OpenSessionInViewFilter(通常配置在web.xml文件中)的作用

    Spring为我们解决Hibernate的Session的关闭与开启问题. Hibernate 允许对关联对象.属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Sessio ...

  6. [jquery-ajax] jquery ajax 三种情况对比

    <button class="btn1">async:false</button> <button class="btn2"> ...

  7. 提高Android和iOS调试编译速度

    http://www.cnblogs.com/findumars/p/7841252.html 提高Android和iOS调试编译速度   如果您使用Delphi开发App,就会遇到:Android和 ...

  8. hbuilder APP服务器端(C#)推送

     实现推送有多种方法和技术手段,我这边是使用三方“个推”去实现对特定用户的推送.我自己是关联业务,对下一步任务代办人进行消息通知.   1 .个推账号申请和配置 1.1.IOS需要推送证书 参考网址: ...

  9. javascript快速排序的思考

    还记得三个月前,学习过快速排序,示例所讲的python快速排序十分易于理解,然而网上学习的c#的快速排序当时就懵逼的,现在已经全忘了,大概记得个思路 在学习完了一些高级的js方法后,今天用js模拟了p ...

  10. STM32F4时钟配置库函数详解

    在STM32中,所有的应用都是基于时钟,所以时钟的配置就尤为重要了,而不能仅仅只知道使用默认时钟. STM32F4的时钟树如上图所示,HSE为外部接入的一个8M的时钟,然后再给PLL提供输入时钟,经过 ...