JSP的几种中文解决方案

来源:互联网 发布:南北朝五代十国 知乎 编辑:程序博客网 时间:2024/05/21 06:59

学习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:重用性极好。

原创粉丝点击