您的位置:首页 > Web前端 > JavaScript

jsp servlet 乱码处理方法-表单提交的 pos 和get 方式

2013-01-10 12:29 661 查看
本文的目的是解决 jsp<->jsp jsp<->servlet 跳转过程 中文乱码问题, 暂时只分析 表单提交的 post 和 get 两种方式。

本文只讲方法,不讲原理。 同时鄙视网络上哪些所以的“专家”对知识一知半解,连基本的测试都没做,就发表言论,误人误国。

本人只是初学,如果还有其他方法,敬请指教。谢谢

环境 myeclips+ tomcat +jdk1.6

myeclips系统默认 utf-8

jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

tomcat\conf\server.xml

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" URIEncoding="utf-8" /> <!-- URIEncoding="utf-8" -->

工程中的web.xml

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>com.common.filtertest</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

filter代码

在 doFilter 函数中

if (ignore || (request.getCharacterEncoding() == null)) {

String encoding = selectEncoding(request);

if (encoding != null) {

request.setCharacterEncoding(encoding);

response.setContentType("text/html; charset=" + encoding);

}

}

chain.doFilter(httpServletRequest, httpServletResponse);

第一种情况--------------------------------------无URIEncoding="utf-8" 无filter

jsp(post) -> servlet

方法一 dopost

String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); //显示正常

response.setContentType("text/html"); //下面3句话是为了返回正常

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

方法二 dopost

request.setCharacterEncoding("UTF-8"); //必须写在request.getParameter前

String name = request.getParameter("username");

response.setContentType("text/html"); //下面3句话是为了返回正常

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

jsp(post) -> jsp

方法一

<% String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); %>//显示正常

方法二

request.setCharacterEncoding("UTF-8"); //必须写在request.getParameter前

String name = request.getParameter("username");

jsp(get) -> servlet

方法一 doget

String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); //显示正常

response.setContentType("text/html"); //下面3句话是为了返回正常

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

jsp(get) -> jsp

方法一

String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); //显示正常

第二种情况--------------------------------------无URIEncoding="utf-8" 有filter

jsp(post) -> servlet + filter

方法一 dopost

直接取值即可,同时response也不用设置字符集

String name = request.getParameter("username");

jsp(post) -> jsp + filter

方法一

直接取值即可

String name = request.getParameter("username");

jsp(get) -> servlet + filter

方法一 doget

String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");

response.setContentType("text/html"); //下面3句话是为了返回正常

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

jsp(get) -> jsp + filter

方法一

String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");

第三种情况--------------------------------------有URIEncoding="utf-8" 有filter

方法一 dopost

直接取值即可,同时response也不用设置字符集

String name = request.getParameter("username");

jsp(post) -> jsp

方法一

直接取值即可

String name = request.getParameter("username");

jsp(get) -> servlet

方法一 doget

直接取值即可,同时response也不用设置字符集

String name = request.getParameter("username");

jsp(get) -> jsp

方法一

直接取值即可

String name = request.getParameter("username");

第四种情况--------------------------------------有URIEncoding="utf-8" 无filter

jsp(post) -> servlet

方法一 dopost

String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); //显示正常

response.setContentType("text/html"); //下面3句话是为了返回正常

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

方法二 dopost

request.setCharacterEncoding("UTF-8"); //必须写在request.getParameter前

String name = request.getParameter("username");

response.setContentType("text/html"); //下面3句话是为了返回正常

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

jsp(post) -> jsp

方法一

<% String name = new String (request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); %>//显示正常

方法二

request.setCharacterEncoding("UTF-8"); //必须写在request.getParameter前

String name = request.getParameter("username");

jsp(get) -> servlet

方法一 doget

直接取值即可,同时response也不用设置字符集

String name = request.getParameter("username");

jsp(get) -> jsp

方法一

直接取值即可

String name = request.getParameter("username");

结论如下

1、 有fileter情况下 post方式 jsp <->servlet jsp<->jsp不用初始化字符集

2、 有URIEncoding="utf-8" 情况下 get方式 jsp<->servlet jsp<->jsp 不用初始化字符集

3、 没有fileter情况下 post方式 jsp <->servlet jsp<->jsp 为了达到无乱码 有两种方法。 见第一,四种情况

4、 没有URIEncoding="utf-8" 情况下 get方式 jsp<->servlet jsp<->jsp 为了达到无乱码 有两种方法。 见第一,二种情况

总之,为了达到不初始化字符集做到没有乱码无敌配置如下

1、jsp 配置utf-8

2、工程web.xml 配置过滤器

3、tomcat\conf\server.xml 配置URIEncoding="utf-8"

4、myeclips系统默认 utf-8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: