注意:一般一个站点的所有页面的编码,包括数据库编码都要保持一致,下面默认的编码都是UTF-8

----------------------------------例1:直接提交到jsp页面----------------------------------

input_info.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="display_info.jsp" method="post">
<!-- 输入中文来测试 -->
请输入要显示的内容:<input type="text" name="info">
<input type="submit" value="显示">
</form>
</body>
</html>

display_info.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
注意这里并没有调用request.setCharacterEncoding(),
你把CharacterEncodingFilter关闭了试试,看看结果有什么
不一样
-->
<%
String str = (String) request.getParameter("info");
%>
<h1><%=str%></h1>
</body>
</html>

CharacterEncodingFilter.java

  charset参数是从web.xml中配置好的,这里读取进来

 public final class CharacterEncodingFilter implements Filter {
private String encoding = null;
private boolean enable = false;
public void destroy() {
this.encoding = null;
}
/**
* 完成request.setCharacterEncoding(encoding);
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (this.enable) {
String encoding = this.selectEncoding(request);
if (encoding != null && !encoding.equals("")) {
request.setCharacterEncoding(encoding);
}
}
// Pass control on to the next filter
chain.doFilter(request, response);
// After other filters are done:
if (this.enable) {
String encoding = this.selectEncoding(request);
if (encoding != null && !encoding.equals("")) {
// response.setCharacterEncoding(encoding); // 实验证明这货没起什么作用,所以,不要也行
}
}
}
/**
* 读取encoding参数以及enable参数,enable参数与encoding的功能无关,只是用来启用或者停用这个filter的
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
if (!Charset.isSupported(encoding)) {
encoding = null; // 如果不支持的话,只能选择默认的encoding了,这个filter就不起作用
}
// 读取enable参数
String enableString = filterConfig.getInitParameter("enable");
if (enableString.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
}
}

web.xml

     <filter>
<filter-name>charset-encoding</filter-name>
<filter-class>org.foo.filterdemo.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charset-encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

--------例2:提交到Servlet,Serlvet再设置为request的attribute,再提交到jsp页面--------

AttributeSetterServlet.java

 public class AttributeSetterServlet extends HttpServlet {
/**
* Generated serialVersionUID
*/
private static final long serialVersionUID = 8458482445490259121L; @Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 在这里也没有调用request.setCharacterEncoding(),
// 你把CharacterEncodingFilter关闭了试试,看看结果有什么
// 不一样
String attr = req.getParameter("attr");
if (attr != null) {
// System.out.println(this + ", " + attr); // @Debug
attr += " -- 这是一个小尾巴";
req.setAttribute("attr", attr);
req.getRequestDispatcher("display_attribute.jsp").forward(req, resp);
}
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}

input_attribute.html

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="AttributeSetterServlet" method="post">
<!-- 输入中文来测试 -->
请输入要设置的attribute:<input type="text" name="attr">
<input type="submit" value="显示">
</form>
</body>
</html>

display_attribute.jsp

<%@ page language="java" contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>设置的attribute是:<%=request.getAttribute("attr")%></h1>
</body>
</html>

web.xml中添加如下代码:

     <servlet>
<servlet-name>attribute-setter-servlet</servlet-name>
<servlet-class>
org.foo.servletdemo.AttributeSetterServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>attribute-setter-servlet</servlet-name>
<url-pattern>/AttributeSetterServlet</url-pattern>
</servlet-mapping>

使用filter解决request.getParameter的中文乱码问题的更多相关文章

  1. 解决Request中参数中文乱码问题

    1.使用配置过滤器的方式解决 在web.xml中增加过滤器: <!--配置解决中文乱码的过滤器--> <filter> <filter-name>character ...

  2. tomcat7解决jsp参数传递的中文乱码问题

    解决jsp参数传递的中文乱码问题 制作人:全心全意 在jsp页面中,通过参数传递传递中文时,在显示参数值时中文内容变成了乱码.这是因为请求参数的文字编码方式与页面中的不一致造成的,所有的request ...

  3. SpringMVC学习系列-后记 解决GET请求时中文乱码的问题

    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...

  4. 解决gitk显示文件内容中文乱码

    解决gitk显示文件内容中文乱码 1.git config 命令 设置git gui的界面编码 git config --global gui.encoding utf-8 2.修改配置文件 在~\e ...

  5. 解决PLSQL Developer 插入中文 乱码问题(转)

    原文地址:解决PLSQL Developer 插入中文 乱码问题 PLSQL Developer 插入中文 乱码问题,如图     这个是由于oracle服务器端字符编码 和 Oracle 客户端 字 ...

  6. 解决windows下vim中文乱码

    解决windows下vim中文乱码 windows安装了vim8,也就是gvim后,打开带有中文的文档,显示中文是乱码. 毕竟有许多文档我是用utf-8编码的,所以解决的办法是设置一下编码为utf-8 ...

  7. fedora23解决gedit和vim中文乱码的问题

    fedora23解决gedit和vim中文乱码的问题 a, an, the这些不定/定 冠词并不是在所有的名词 前面都要加. 只有在语义上需要时,才加. 名词的单数/复数 前面不加 冠词的 例子多的是 ...

  8. 解决 SecureCRT 和 SecureFX 中文乱码

    引言 最近老是有小伙伴给我发消息说,下载的 SecureCRT 和 SecureFX 安装打开后连接了自己的服务器或虚拟机后会出现中文乱码,每次都要给一一回复,我倒没事,主要是有时候因为工作的原因,所 ...

  9. request、response 中文乱码问题与解决方式

    request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码:   response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...

随机推荐

  1. 3 cocos2dx 3.0 源码分析-mainLoop详细

    简述:   我靠上面图是不是太大了, 有点看不清了.  总结一下过程: 之前说过的appController 之后经过了若干初始化, 最后调用了displayLinker 的定时调用, 这里调用了函数 ...

  2. DedeCms V5.6 plus/advancedsearch.php 任意sql语句执行漏洞

    漏洞版本: DedeCms V5.6 漏洞描述: DedeCMS内容管理系统软件采用XML名字空间风格核心模板:模板全部使用文件形式保存,对用户设计模板.网站升级转移均提供很大的便利,健壮的模板标签为 ...

  3. hello--GAN

    GAN系列学习(1)——前生今世 DCGAN.WGAN.WGAN-GP.LSGAN.BEGAN原理总结及对比 [Learning Notes]变分自编码器(Variational Auto-Encod ...

  4. java学习笔记4--对象的初始化与回收

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note4.html,转载请注明源地址. 1.对象初始化和回收 对象初始化 系统在生成对象时,会 ...

  5. [Python爬虫] 之四:Selenium 抓取微博数据

    抓取代码: # coding=utf-8import osimport refrom selenium import webdriverimport selenium.webdriver.suppor ...

  6. -bash: ./xxx.sh: /bin/bash^M: bad interpreter: No such file or directory

    问题的原因是在windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 不要使用记事本编辑,使用代码编辑器可以正常执行

  7. C++ 相关面试题汇总

    多态性与虚函数 (陈维兴教材) (1)所谓多态性就是不同对象在收到相同的消息时,产生不同的动作.直观的说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,从而可以使用相同的方式来调 ...

  8. 为pc编译配置安装当前最新的内核

    搜索公众号:itxxgh  (IT学习干货),全公益.免费.定期,提供,<IT学习教程>.不会骚扰大家,仅仅需轻点关注,也会传播<中华传统文化>传播正能量.  或扫描二维码 1 ...

  9. android studio提示信息乱码解决方法

    在build.gradle文件中加上 android {compileOptions.encoding = "GBK"}就好了

  10. poj 2388 insert sorting

    /** \brief poj 2388 insert sorting 2015 6 12 * * \param * \param * \return * */ #include <iostrea ...