为了处理中文乱码部分能够在整个
WEB
系统中都能够使用到,所以将中文乱码处理写成了一个
Filter(
过滤器
)
,并在
web.xml
中配置所有的请求都将经过这个
Filter
进行过滤。
Filter
部分的代码如下:
public
class
ProFilter
implements
Filter
{
protected
FilterConfig
filterConfig
;
/**
*
初始化
*/
public
void
init(FilterConfig filterConfig)
throws
ServletException
{
this
.
filterConfig
=filterConfig;
}
private
String toUTF(String inStr)
throws
UnsupportedEncodingException
{
String outStr =
""
;
if
(inStr !=
null
)
{
//outStr=java.net.URLDecoder.decode(inStr);//
不用
decode
了
,
到这的时候就已经自动
decode
过了
//
将字符串转为
UTF-8
编码形式
outStr =
new
String(inStr.getBytes(
"iso-8859-1"
),
"UTF-8"
);
}
return
outStr;
}
/**
*
中文乱码过滤处理
*/
public
void
doFilter(ServletRequest svlrequest, ServletResponse svlresponse,
FilterChain chain)
throws
IOException, ServletException
{
HttpServletRequest request=(HttpServletRequest)svlrequest;
HttpServletResponse response=(HttpServletResponse)svlresponse;
String method = request.getMethod();
//1.
以
post
方式提交的请求
,
直接设置编码为
UTF-8
if
(method.equalsIgnoreCase(
"post"
))
{
try
{
request.setCharacterEncoding(
"UTF-8"
);
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//2.
以
get
方式提交的请求
else
{
//
取出客户提交的参数集
Enumeration<String> paramNames = request.getParameterNames();
//
遍历参数集取出每个参数的名称及值
while
(paramNames.hasMoreElements())
{
String name = paramNames.nextElement();
//
取出参数名称
String values[] = request.getParameterValues(name);
//
根据参数名称取出其值
//
如果参数值集不为空
if
(values !=
null
)
{
//
如果参数值集中只有一个值
if
(values.
length
== 1)
{
try
{
//
调用
toUTF(values[0])
函数
,(values[0]
即第一个参数值
)
方法转换参数值的字元编码
String vlustr=toUTF(values[0]);
//
并将该值以属性的形式藏在
request
request.setAttribute(name, vlustr);
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//
如果参数值集中有多个值
else
{
//
遍历参数值集
for
(
int
i=0;i<values.
length
;i++)
{
try
{
//
回圈依次将每个值调用
toUTF(values[i])
方法转换参数值的字元编码
String vlustr=toUTF(values[i]);
values[i] = vlustr;
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//
将该值以属性的形式藏在
request
request.setAttribute(name, values);
}
}
}
}
//
设置响应方式和支持中文的字元集
response.setContentType(
"text/html;charset=UTF-8"
);
//
继续执行下一个
filter,
无一下个
filter
则执行请求
chain.doFilter(request, response);
}
/**
*
销毁方法
*/
public
void
destroy()
{
}
}
过滤器部分,可用来处理页面提交的
post
和
get
方法产生的中文乱码问题。
Post
方式提交的数据(
form
表单中提交的数据)只需要进行请求字符编码设置
request.setCharacterEncoding(
"UTF-8"
);
和响应设置
response.setContentType(
"text/html;charset=UTF-8"
);
设置就可以了。
Get
方式提交的数据会包含在
url
中,(如:
leavesp?work=
部门主管审批),则需要取出参数名:
Enumeration<String> paramNames = request.getParameterNames();
(如:
work
)和取出参数值:
String values[] = request.getParameterValues(name);(
如:部门主管审批
),
然后再将参数值进行编码转换:
outStr =
new
String(inStr.getBytes(
"iso-8859-1"
),
"UTF-8"
);
过滤器写好这后就需要到
web.xml
中
<
web-app
>
与
</
web-app
>
之间进行配置了,
web.xml
中配置如下:
<!--
配置过滤器
-->
<
filter
>
<
description
>
处理中文乱码过滤器
</
description
>
<
filter-name
>
ProFilter
</
filter-name
>
<
filter-class
>
com.util.filters.ProFilter
</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
ProFilter
</
filter-name
>
<
url-pattern
>
*
</
url-pattern
><!--
过滤所有请求,注:
tomcat5
请用
/* -->
</
filter-mapping
>
这样配置之后只要页面有任何请求都会通过
ProFilter
进行中文处理了,就不会再发生中文乱码问题了。
那一串通过
get
传递过来的中文处理过程如下:
1.
在
jsp
页面的
JavaScript
里面进行编码处理:
url=encodeURI(‘
leavesp?work=
部门主管审批
’)
编码后结果:
url=
leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9
2.
因为在
web.xml
过滤器配置为
<
url-pattern
>
*
</
url-pattern
>
所以所有请求将会通过过滤器进行处理,此过滤器处理过程如下:
2.1
获得参数名集合:
Enumeration<String> paramNames = request.getParameterNames();
String name = paramNames.nextElement();
2.1
结果中有
name=’work’
;一值。
2.2
通过参数名获得参数值:
String values[] = request.getParameterValues(name);
因
work
的值只有一个所以
2.2
的结果为:
values[0]=’
é
¨é—¨ä¸»ç®¡å®¡æ¹’;(
此处得到的是字符串:“部门主管审批”的
iso-8859-1
编码格式字符
)
2.3
获得字符串的
UTF-8
编码格式字符:
outStr =
new
String(inStr.getBytes(
"iso-8859-1"
),
"UTF-8"
);
2.3
中获得的结果为
outStr=
“部门主管审批”
.
至此中文已经正常了。
不过过滤器还没处理结束,还得将参数名对应的值
(
已经处理的值
)
再重新藏到请求中去。
2.4
将参数名对应结果藏入请求中:
request.setAttribute(name,
outStr
);
通过
2.4
处理后,请求中的
work
的值就变成了:部门主管审批
2.5
继续执行下一个
filter,
无一下个
filter
则执行请求
chain.doFilter(request, response);
3.
通过过滤器之后,就可以进入请求中对应
leavesp
的
servlet
了(
servlet
就不做说明了),此时在
servlet
中通过
String work=request.getParameter(“work”);
就可以获得
url
中传递过来的中文参数值了,结果为
work=”
部门主管审批
”
。
分享到:
相关推荐
然而,在实际操作中,我们时常会遇到一个问题,那就是当JSP页面通过URL传递包含中文字符的参数时,可能会出现乱码现象。这个问题主要源于HTTP协议的特性以及字符编码的处理不当。本教学视频将详细讲解如何解决JSP中...
在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...
### 解决JS传递中文乱码问题 在Web开发过程中,我们经常会遇到中文字符编码的问题,尤其是在前后端数据交互时,中文字符的乱码问题更是让人头疼。本文将深入探讨如何解决JavaScript(简称JS)在传递中文字符时出现...
为了解决奇数个中文字符URL传递乱码的问题,可以采用JavaScript来实现正确的编码处理。具体步骤如下: 1. **获取原始URL**:首先获取用户输入或系统生成的原始URL。 2. **编码处理**: - 使用`encodeURI()`函数...
URL地址传参中文乱码处理是指在Web应用程序中,将中文参数传递给服务器时,可能出现乱码的情况。这种情况可能是由于编码问题或Tomcat服务器的配置问题引起的。 在处理URL地址传参中文乱码时,通常有三种解决方案: ...
当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...
### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...
jsp使用URL编码传递中文参数乱码问题
在Web开发中,尤其是使用Java JSP技术时,我们可能会遇到URL中传递参数出现乱码的问题。这是因为不同的字符集编码方式可能导致字符在传输过程中无法正确解析。本文将详细介绍两种解决JSP页面URL参数乱码的方法,虽然...
#### 四、URL传递参数时的乱码处理 1. **问题描述**:通过URL直接传递中文参数时出现乱码。 2. **解决方案**: - 使用过滤器(Filter)在请求处理前设置编码格式。 - 如果已经发生了乱码,可以通过字符串编码转换...
在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是一个常见的问题。这个问题通常是由于字符编码不一致导致的。以下是三种常见的解决方法: 1. **配置Web.config文件**: 在Web.config文件的`...
在Java Web开发中,URL中文乱码问题是一个常见的困扰,主要出现在传递含有中文字符的参数时。本案例中,我们将探讨如何解决这个问题,涉及到的主要知识点包括URL编码、字符集转换以及在Java Servlet、JSP和Struts2...
在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...
然而,在处理中文等非ASCII字符时,经常会遇到一个令人头疼的问题——中文乱码。本文将详细介绍如何在JavaScript中对中文进行编码,并在Java后端进行解码来解决这一问题。 #### 一、问题背景 在使用AJAX向服务器...
然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...
在实际解决乱码问题的过程中,如果发现使用Base64加密传输中文数据还会出现问题,可以改用URL编码的方式来传输数据,即使用JavaScript的`encodeURI`函数对数据进行两次URL编码,后端接收到后进行一次URL解码即可。...
然而,在处理中文参数时,尤其是通过GET和POST方法传递时,经常会出现乱码问题。这通常是由于字符编码不一致或者处理不当导致的。以下是对这一问题的详细解析: 首先,我们需要理解字符编码的基本概念。在Web中,...
当我们需要通过URL传递参数时,经常会遇到中文参数的问题。这是因为URL本身是基于ASCII编码的,不支持直接传输非ASCII字符,如中文。本篇将详细介绍如何在Servlet中处理URL传递中文参数的情况。 首先,了解URL编码...
在二维码(QR Code)编码和解码过程中,中文字符可能会出现乱码问题,这通常是由于编码格式不正确或处理方式不当导致的。本教程将详细解释这个问题,并提供一个开源示例帮助你理解和解决中文乱码问题。 首先,我们...
### AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题 #### 背景与问题概述 在使用AJAX技术进行前后端数据交互时,经常会出现中文字符编码的问题,尤其是在使用`XMLHttpRequest`对象发送请求的过程中。例如...