一:设置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. MySQL外键使用及说明详解

    一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持 ...

  2. POP介绍与使用实践(快速上手动画)[转]

    前言 动画在APP开发过程中 大家多多少少都会接触到 而且随着ios7的扁平化风格启用之后 越来越多的APP开始尝试加入各种绚丽的动画交互效果以增加APP的用户体验(当然 还是以国外的APP居多) 有 ...

  3. SQL Server 索引基本概念与优化

    数据页和区 页 SQL Server 中的数据以“页”(Page)的形式保存数据,页是SQL Server 的IO单位,读/写一次至少是一页.一页为8K(8192byte). 页由三部分组成,页头,数 ...

  4. Linq to Object 的简单使用示例

    语言集成查询 (LINQ) 是 Visual Studio 2008 中引入的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能. LINQ 引入了标准易学的数据查询和更新 ...

  5. SQL笔记---分页

    随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_Stock ...

  6. BitAdminCore框架应用篇:(三)核心套件querySuite入门介绍

    索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...

  7. 批处理系列(13) -从视频导出高质量GIF图片

    需要ffmpeg,配置ffmpeg到环境变量. 保存代码到HQGIF.bat,与视频同目录,管理员权限运行CMDcd到此目标目录: HQGIF.bat input_video_name.mp4 out ...

  8. 基于Spring MVC的web应用随应用启动而加载

    写个类实现org.springframework.context.ApplicationContextAware接口即可. 但是如下的程序会在启动时加载两次: @Controller public c ...

  9. log4j学习(一)最简单的例子

    前言: 之前笔者一直是在System.out中打日志的,由于笔者大部分时候是编写在tomcat容器里运行的一些个小web应用,所以这么做似乎没什么问题:打印出来的日志都可以在tomcat自己的log目 ...

  10. Word发表blog格式模板

    一级标题(黑体,二号,加粗) 二级标题(黑体,三号,加粗) 正文(宋体+Times New Roman,小四) 注意事项: 序号列表"不连续"时,不得使用自动序号 连续(word连 ...