程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 通過過濾器(Filter)解決JSP的Post和Request中文亂碼問題,filterrequest

通過過濾器(Filter)解決JSP的Post和Request中文亂碼問題,filterrequest

編輯:關於JSP

通過過濾器(Filter)解決JSP的Post和Request中文亂碼問題,filterrequest


jsp代碼:

import javax.servlet.*;
import javax.servlet.http.*;

public class CharsetFilter implements Filter
{
  public void destroy() 
  {
    
  }
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
  {
    try
    {
      HttpServletRequest httpRequest = (HttpServletRequest)request;
      String method = httpRequest.getMethod().toLowerCase();
      if(method.equals("post"))
      {
        //如果是post,即表單方法,直接設置charset即可
        request.setCharacterEncoding("UTF-8");
      }
      else if(method.equals("get"))
      {
        //如果是get方法
        request.setCharacterEncoding("UTF-8");
        request = new HttpServletRequestWrapper((HttpServletRequest)request)
        {
          public String getParameter(String str)
          {
            try
            {
              return new String(super.getParameter(str).getBytes("iso-8859-1"),"GBK");
            }
            catch(Exception e)
            {
              return null;
            }
   
          }
        };
      }
      
      chain.doFilter(request, response);
    }
    catch(Exception e){}
  }
  
  public void init(FilterConfig filterConfig) 
  {
    
  }
}

過濾器配置:

<filter>
    <filter-name>CharFilter</filter-name>
    <filter-class>CharsetFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CharFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

在JSP頁面提交表單,以post方式提交,寫了過濾器處理中文亂碼問題

可能造成的原因:
頁面 後台業務 數據 中間有一個環節編碼不一致。
是否對該字段做了編碼轉換。

針對1:
檢查頁面編碼 是什麼編碼。如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
過濾器設置的是什麼編碼。數據庫采用什麼編碼。然後最好統一編碼。

針對2:
看看是否做了強制轉換,或者設置了request response的編碼。

 

對於JSP中文亂碼問題

你這麼做就已經處理了
這是處理亂碼方法之一
1 String str = new String(“原串”.getBytes(“原編碼”),“須解析成的編碼”);
String username=new String(request.getParameter("username").getBytes("ISO8859-1"),"GB2312");
2 request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
在tomcat的conf中server.xml文件中<context >中設置useBodyEncodingForURI="true"或URIEncoding="GB2312"重啟服務器
3 過濾器filter,就是對請求的地址進行攔截處理,然後交給servlet
新建一個filter,implements javax.servlet.Filter
覆蓋其三個方法
web.xml文件中增加一個<filter>標簽
<filter>中可以設置初始化參數<init-param></init-param>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved