JSP的幾種中文解決方案__JSP

來源:互聯網
上載者:User

學習J2EE至今,項目也只做了兩個,中途遇到一些問題,最多的可能要數中文顯示及插入資料庫的中文問題。現總結如下:

(一)定義中文轉換方法:

建立JSP頁面,命名為toChinese.jsp 也可以是別的;

定義方法為:

<%!

String toChinese(String str) {

  String rs = null;

  byte[] temp;

  try {

    temp = getBytes("ISO8859-1");

    rs = new String(temp,"gb2312");

  }

  catch(java.io.UnsupportedEncodingException e) {

    e.printStackTrace();

  }

  return rs;

}

String toChinese(Object obj) {

  return toChinese(obj.toString());

}

%>

在JSP頁面中,需要用到中文轉換的地方就引入該頁面,然後用這個方法進行轉換。

如:<%@ include file="toChinese.jsp" %>

String content = toChinese(request.getParameter("tContent"));

PS:這種方法是比較保守的做法。因為無論把系統移植到任何地方,都可以用。

(二)設定HTTP詢問為GB2312:

在每個需要中文轉換的地方設定:request.setCharacterEncoding("gb2312");

那麼,所有以POST或者GET方式傳遞的參數都會以GB2312方式編碼。

PS:這種方法很方便,但是也造成編碼的重複。重用性級差。

(三)編寫Filter過濾器,讓所有的頁面的HTTP詢問都以GB2312方式編碼:

編寫過濾器


package com.pharm.filter;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

/**
 * 字元編碼過濾器 <br>
 *
 * 讓 request 為簡體中文 GB2312
 *
 * @author  FuChun-阿影
 * @version 1.1
 */
public class EncodingFilter implements Filter {
 protected FilterConfig filterConfig;
 private String targetEncoding = "gb2312";
 
 /**
  * 初始化過濾器和一般的Servlet一樣,它也可以獲得初始參數
  *
  * @throws ServletException if an error occurred.
  */
 public void init(FilterConfig config) throws ServletException {
  this.filterConfig = config;
  this.targetEncoding = config.getInitParameter("encoding");
 }
 
 /**
  * 進行過濾處理,這個方法最重要,也是Filter的核心代碼
  *
  * @throws IOException if an error occurred.
  * @throws ServletException if an error occurred.
  */
 public void doFilter(ServletRequest srequest,ServletResponse sresponse,FilterChain chain)
  throws IOException,ServletException {
  
  System.out.println("使用以下方法對HTTP請求進行編碼: encoding="+targetEncoding);
  
  HttpServletRequest request = (HttpServletRequest)srequest;
  request.setCharacterEncoding(targetEncoding);
  chain.doFilter(srequest,sresponse);
 }
 
 /**
  * 設定過濾器日誌
  */
 public void setFilterConfig(final FilterConfig filterConfig) {
  this.filterConfig = filterConfig;
 }
 
 /**
  * 實現Filter的方法,銷毀過濾器
  */
 public void destroy() {
  this.filterConfig = null;
 }
}

在WEB.xml中描述:
<filter>
  <filter-name>encoding</filter-name>
  <filter-class>EncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>gb2312</param-value>
  </init-param>
 </filter>
 
 <filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

PS:重用性極好。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.