在用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;
}
}