在用JSP做开发时,当页面参数有中文时,需要用request.getParameter得到并使用参数时,如果不转换会出现乱码,解决方法: 若从javascript对参数进行赋值,即使用了过滤器也解析不了乱码问题。当页面编码用"UTF-8", get方式做下字符转换并输出, //javascript赋值 <script type="text/javascript"> 。。。 form1.content.value="jsp编码的问题"; 。。。 </script> //jsp页面text控件 。。。 <input type="text" name="content"> 。。。 //jsp页面的Java代码 % 这样可以正常输出。 第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。 JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。 第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效。
2、用过滤器代码解决乱码
|
1)web.xml配置
在文件末尾,</web-app>之前加入
<!-- 配置编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.filter.EncodingFilter</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>
<servlet-name>action</servlet-name>
</filter-mapping>
2)在包com.filter编写EncodingFilter.java如下:
package com.filter;
import java.io.IOException;
import javax.servlet.*;
public class EncodingFilter implements Filter {
String encoding = null;
FilterConfig filterConfig = null;
//初始化方法
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
//过滤处理方法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if (encoding!=null){
//对请求进行编码设置
request.setCharacterEncoding(encoding);
}
//将处理权转交给下一个处理器
chain.doFilter(request,response);
}
//销毁方法
public void destroy() {
// TODO Auto-generated method stub
this.encoding = null;
this.filterConfig = null;
}
}