当前位置: 首页 > 图文教程 > 网络编程 > JSP > 解决JSP开发Web程序中文显示三种方法

JSP
搭建Eclipse+MyEclipse开发环境
卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!
一个jsp+AJAX评论系统
JSP 多个文件打包下载代码
JSP 动态树的实现
jsp 重复提交问题
J2ME/J2EE实现用户登录交互 实现代码
访问JSP文件或者Servlet文件时提示下载的解决方法
JSP EL表达式详细介绍
JSP 报表打印的一种简单解决方案
jsp 自定义标签实例
AJAX自学练习 无刷新从数据库后台取数据显示
AJAX 自学练习 请求与显示
AJAX 自学练习 无刷新提交并修改数据库数据并显示
jsp 文件上传浏览,支持ie6,ie7,ie8
JSP application(return String)用法详例
jsp form表单方法示例
JSP request(return String)用法详例
JSP forward用法分析实例代码分析
JSP JavaBean的setProperty属性

解决JSP开发Web程序中文显示三种方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 53 ::
收藏到网摘: n/a

方法一:最简单也是用的最多的方法

  <%@ page language="java" pageEncoding="GBK" %>

  或者<%@ page contenttype="text/html;charset=gbk";>这里可以用gb2312或者gbk,只是gbk比gb2312支持跟多的字符。

  这个方法用于jsp页面中的中文显示。

  方法二:使用过滤器

  过滤器使用主要针对表单提交,插入数据库的数据都是?号。这也是应为tomcat不按request所指定的编码进行编码,还是自作主张的采用默认编码方式iso-8859-1编码。

  编写一个SetCharacterEncodingFilter类。

  import java.io.IOException; 
  import javax.servlet.Filter; 
  import javax.servlet.FilterChain; 
  import javax.servlet.FilterConfig; 
  import javax.servlet.ServletException; 
  import javax.servlet.ServletRequest; 
  import javax.servlet.ServletResponse; 
  public class SetCharacterEncodingFilter implements Filter { 
   protected String encoding = null; 
   protected FilterConfig filterConfig = null; 
   protected boolean ignore = true; 
   public void init(FilterConfig filterConfig) throws ServletException { 
    this.filterConfig=filterConfig; 
    this.encoding=filterConfig.getInitParameter("encoding"); 
    String value=filterConfig.getInitParameter("ignore"); 
    if(value==null) 
     this.ignore=true; 
    else if(value.equalsIgnoreCase("true")) 
     this.ignore=true; 
    else 
     this.ignore=false; 
   } 
   public void doFilter( 
  ServletRequest request, ServletResponse response, FilterChain chain) 
   throws IOException, ServletException { 
   // TODO 自动生成方法存根 
   if (ignore    (request.getCharacterEncoding() == null)) { 
    String encoding = selectEncoding(request); 
    if (encoding != null) 
     request.setCharacterEncoding(encoding); 
   } 
   chain.doFilter(request, response); 
  } 
  public void destroy() { 
   // TODO 自动生成方法存根 
   this.encoding = null; 
   this.filterConfig = null; 
  } 
  protected String selectEncoding(ServletRequest request) { 
   return (this.encoding); 
  } 
  }

然后再web.xml加上

  <!-- Set Character Encoding--> 
  <filter> 
   <filter-name>Set Character Encoding</filter-name> 
   <filter-class>com.struts.common.SetCharacterEncodingFilter</filter-class> 
   <init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF-8</param-value> 
   </init-param> 
  </filter> 
  <filter-mapping> 
   <filter-name>Set Character Encoding</filter-name> 
    <url-pattern>/*</url-pattern> 
   </filter-mapping> 
  <!-- Set Character Encoding-->
 

  使用过滤器的好处很多,特别是项目之中。

  而且在使用国际化时就更有用了,只要在页面指定 <%@ page language="java" pageEncoding="UTF-8" %>,服务器就会根据本地Locale来显示正确的字符集。

  所以我特别推荐使用过滤器。

  方法三:修改tomcat的server.xml文件中URIEncoding

  <Connector debug="0" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" 
  port="80" redirectPort="8443" enableLookups="false" minSpareThreads="25" maxSpareThreads="75" 
  maxThreads="150" maxPostSize="0" URIEncoding="GBK" > 
  </Connector>
 

  这个方法主要针对从url中获取字符串的问题。

  在tomcat5.0及以上版本,post和get方法在处理编码时有所不同。如果你在url中获取中文就会出现?号。但在tomcat4.1版本没有问题,因为tomcat4.1的post和get方法在处理编码时是一样的。