工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1895|回复: 4

JSP2+Tomcat6+MSSQL2000中文问题的解决方法

[复制链接]
发表于 2007-5-14 15:29 | 显示全部楼层 |阅读模式
一、数据库设置

不用额外设置,全部默认即可。


二、服务器设置

打开tomcat目录下的conf/server.xml文件,找到这样的一句:
  1. <Connector port="8080" protocol="HTTP/1.1"  maxThreads="150" connectionTimeout="20000" redirectPort="8443"  />
复制代码


修改成这样:
  1.     <Connector port="8080" protocol="HTTP/1.1"
  2.                maxThreads="150" connectionTimeout="20000"
  3.                redirectPort="8443"  useBodyEncodingForURI="true" URIEncoding="GBK"/>
复制代码


同时在配置JNDI连接池时,也指定连接编码。如:

  1. <Context path="/myApp" docBase="c:/jspProject"
  2.     debug="0" reloadable="true" crossContext="true">
  3.     <Resource name="jdbc/myjndi" auth="Container" type="javax.sql.DataSource"
  4.         maxActive="100" maxIdle="30" maxWait="10000"
  5.         username="sa" password="" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
  6.         url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=dbTest;useUnicode=true&characterEncoding=GBK"/>
  7. </Context>
复制代码


三、页面设置

首先应该写一个过滤器。

  1. package mypackage;
  2. import java.io.IOException;
  3. import javax.servlet.*;

  4. public class CharacterEncoding implements Filter {
  5. protected String encoding = null;
  6. protected FilterConfig filterConfig = null;
  7. protected boolean ignore = true;

  8. public void destroy() {
  9.   this.encoding = null;
  10.   this.filterConfig = null;
  11. }

  12. public void doFilter(ServletRequest request, ServletResponse response,
  13.    FilterChain chain) throws IOException, ServletException {
  14.   if (ignore || (request.getCharacterEncoding() == null)) {
  15.    String encoding = selectEncoding(request);
  16.    if (encoding != null)
  17.     request.setCharacterEncoding(encoding);
  18.   }
  19.   chain.doFilter(request, response);
  20. }

  21. public void init(FilterConfig filterConfig) throws ServletException {
  22.   this.filterConfig = filterConfig;
  23.   this.encoding = filterConfig.getInitParameter("encoding");
  24.   String value = filterConfig.getInitParameter("ignore");
  25.   if (value == null)
  26.    this.ignore = true;
  27.   else if (value.equalsIgnoreCase("true")
  28.     || value.equalsIgnoreCase("yes"))
  29.    this.ignore = true;
  30.   else
  31.    this.ignore = false;
  32. }

  33. protected String selectEncoding(ServletRequest request) {
  34.   return (this.encoding);
  35. }
  36. }
复制代码


同时在应用程序的web.xml中配置:


  1. <filter>
  2.   <filter-name>CharacterEncoding</filter-name>
  3.   <filter-class>mypackage.CharacterEncoding</filter-class>
  4.   <init-param>
  5.    <param-name>encoding</param-name>
  6.    <param-value>GBK</param-value>
  7.   </init-param>
  8. </filter>
  9. <filter-mapping>
  10.   <filter-name>CharacterEncoding</filter-name>
  11.   <url-pattern>/*</url-pattern>
  12. </filter-mapping>
复制代码


这样基本上已经可以了,但做完下面的一些事,会更好。

写一个JSP文件,后缀名可以为"jspf",即 header.jspf ,里面有一句:
<%@ page contentType="text/html; charset=GBK" %>

然后又在web.xml中配置:


  1. <jsp-config>
  2.   <jsp-property-group>
  3.    <url-pattern>*.jsp</url-pattern>
  4.    <page-encoding>GBK</page-encoding>
  5.    <include-prelude>
  6.     /WEB-INF/inc/header.jspf
  7.    </include-prelude>
  8.   </jsp-property-group>
  9. </jsp-config>
复制代码


OK,搞定。

测试通过过,不论是post提交的中文字符还是get提交的都可以正确接受而不用另外转换。

[ 本帖最后由 try 于 2007-5-14 15:32 编辑 ]

评分

2

查看全部评分

发表于 2007-5-14 22:25 | 显示全部楼层
https://www.gdutbbs.com/viewthrea ... hlight=%D6%D0%CE%C4

很久之前写过一篇,原来那么眼熟,欢迎楼主多参与讨论。
回复

使用道具 举报

 楼主| 发表于 2007-5-14 23:07 | 显示全部楼层
奇怪,楼上的帖和我的不同,但都可以解决中文问题!
回复

使用道具 举报

发表于 2007-5-14 23:11 | 显示全部楼层
PPT的MJ  hjack 竟认不出..

PS:谁来总结下PHP+Mysql的乱码问题..
回复

使用道具 举报

 楼主| 发表于 2007-5-23 16:27 | 显示全部楼层
最后醒悟,UTF-8才是正道。

因为用GBK编码时,如果图片文件名有中文字符,在IE下无法查看,在firefox下却可以。因为IE的默认设置中有这样一项:



上述设置全部改成UTF-8,除了
<jsp-config>
  <jsp-property-group>
   <url-pattern>*.jsp</url-pattern>
   <page-encoding>GBK</page-encoding>
   <include-prelude>
    /WEB-INF/inc/header.jspf
   </include-prelude>
  </jsp-property-group>
</jsp-config>


红色部分,因为那是编译时的编码,如果文件保存格式为UTF-8的话,应该要设置为UTF-8(在Windows下的编辑器默认是GB2312,如eclispe)。

上传文件使用组件org.apache.commons.fileupload时,读取表单文本时用
FileItem 的getString(String encode)方法。即getString("UTF-8")

[ 本帖最后由 try 于 2007-5-23 17:22 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-30 21:35

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表