Struts中文(包括资源文件)问题解决方案

原创 2004年03月15日 09:31:00

俺才学习STRUTS碰到中文问题,研究了一整天,在网上狂搜一通,整理一下成果给大家分享!不足处大家能指正,谢谢!

STRUTS资源文件中文字符集问题

native2ascii -encoding GBK F:/myStruts/src/mystruts/ApplicationResources.properties F:/myStruts/src/mystruts/ApplicationResources_zh_CN.properties将原有的资源文件转换成GBK码。并在WEB.XML文件中加入以下代码(红色部分):

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

      <param-name>application</param-name>

      <param-value>mystruts.ApplicationResources_zh_CN</param-value>

    </init-param>

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

    <init-param>

      <param-name>debug</param-name>

      <param-value>2</param-value>

    </init-param>

    <load-on-startup>2</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

  <filter>

    <filter-name>Set Character Encoding</filter-name>

    <filter-class>filters.SetCharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>GBK</param-value>

    </init-param>

    <init-param>

      <param-name>ignore</param-name>

      <param-value>true</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>Set Character Encoding</filter-name>

    <url-pattern>*.do</url-pattern>

  </filter-mapping>

  <filter-mapping>

    <filter-name>Set Character Encoding</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <filter>

    <filter-name>Request Dumper Filter</filter-name>

    <filter-class>filters.RequestDumperFilter</filter-class>

  </filter>

  <!--<filter-mapping>

    <filter-name>Request Dumper Filter</filter-name>

    <url-pattern>*.do</url-pattern>

  </filter-mapping>

  <filter-mapping>

    <filter-name>Request Dumper Filter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>-->

  <taglib>

    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>

  </taglib>

</web-app>

STRUTS中文问题

解决办法1:(未实现)

jakarta-struts-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1.0.2-src/src/share/org/apache/struts/util/PropertyMessageResources.java

将第289行的:messages.put(messageKey(localeKey, key),props.getProperty(key));

改成下面的代码:

String sProps = props.getProperty(key);

try

{

sProps = new String(sProps.getBytes("ISO-8859-1"),"GBK");

}

catch (Exception e)

{

e.printStackTrace();

}

messages.put(messageKey(localeKey, key),sProps);

编译后替换原有STRUTS.JAR中的PropertyMessageResources类。

解决办法2

在工程中加入2个类filters.RequestDumperFilterfilters.SetCharacterEncodingFilterC:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/jsp-examples/WEB-INF/classes/filters),修改WEB.XML代码(红色部分)如下:

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>

      <param-name>application</param-name>

      <param-value>mystruts.ApplicationResources_zh_CN</param-value>

    </init-param>

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

    <init-param>

      <param-name>debug</param-name>

      <param-value>2</param-value>

    </init-param>

    <load-on-startup>2</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

  <filter>

    <filter-name>Set Character Encoding</filter-name>

    <filter-class>filters.SetCharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>GBK</param-value>

    </init-param>

    <init-param>

      <param-name>ignore</param-name>

      <param-value>true</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>Set Character Encoding</filter-name>

    <url-pattern>*.do,/*</url-pattern>

  </filter-mapping>

  <taglib>

    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>

  </taglib>

</web-app>

解决办法3

对于处理 Struts Framework 中文编码问题有多种方式,在此我们尝试继承 ActionServlet 类并覆盖 process 方法,于子类process 方法中设定请求编码。由此展现ActionServlet 扮演前端Controller 之特质。

首先,点击选择 JBuilder 主菜单 File | New Classes 准备产生一新的类。并继承自org.apache.struts.action.ActionServlet

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-3-141239091.png并将预设的类名称由Untitled1 改为GBKActionServlet。按下 OK 按钮后即产生程序代码。点击选择 JBuilder 主菜单Wizards | Override Methods… 激活覆盖方法精灵,覆盖方法精灵会自动列出父类 ActionServlet 所有可供覆盖之方法。您可于 Available methods 清单方块中选取process (HttpServletRequest request, HttpServletResponseresponse) 方法,完成后按下 OK 按钮。

CSDN_Dev_Image_2004-3-141239093.png

此时我们可修改覆盖后 process 方法程序代码如下:request.setCharacterEncoding ("GBK") ;super.process (request, response) ;

首行程序代码将 process 传入之参数 request 设定为 GBK编码,其余行为同父类。接下来我们将要修改 web.xml部署描述档,以指定 Servlet 之进入点,首先点击选择左上方项目窗格中的 web.xml。此时,左下方结构窗格将出现 web.xml XML 标记之树状结构。您可以点击选择 Servlets 内的 Action 项目。

CSDN_Dev_Image_2004-3-141239095.png您可以按下 Servlet class 项目右方 [ … ] 按钮选取新的进入点替换预设之ActionServlet,也就是之我们撰写之util. GBKActionServlet。倘若您非常熟悉 web.xml 结构,同样地可以直接点击选择内容窗格内的 Sources 页次,直接以文字编辑器修改 <servlet-class> 标记的内容。web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <filter>

    <filter-name>Request Dumper Filter</filter-name>

    <filter-class>filters.RequestDumperFilter</filter-class>

  </filter>

  <filter>

    <filter-name>Set Character Encoding</filter-name>

    <filter-class>filters.SetCharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>GBK</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>Set Character Encoding</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <filter-mapping>

    <filter-name>Request Dumper Filter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>util. GBKActionServlet</servlet-class>

    <init-param>

      <param-name>application</param-name>

      <param-value>mystruts.ApplicationResources_zh_CN</param-value>

    </init-param>

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

    <init-param>

      <param-name>debug</param-name>

      <param-value>2</param-value>

    </init-param>

    <load-on-startup>2</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

  <taglib>

    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>

  </taglib>

</web-app>

struts中文资源文件

1 先在eclipse属性中设置资源文件属性编码为UTF-8,才可以编写汉语(因为eclipse中在编辑资源文件的时候中文只支持UTF-8)2 运行C:/>native2ascii -encoding...
  • miqi770
  • miqi770
  • 2008年02月14日 12:02
  • 998

关于res资源文件编译后复制到bin文件中的问题

   可能大家发现在eclipse中编译的时候,资源文件res中的文件会复制到bin文件,但是当你的res文件中有图片资源,那图片将不会被复制到bin中.当然class中也没有图片...这个问题是出在...
  • zjsjava
  • zjsjava
  • 2007年07月13日 16:58
  • 1435

Struts2简单配置国际化资源文件及用法

Struts2简单配置国际化资源文件: 1:编写语言文件: message_en_US.properties,在编写中文语言文件:message.properties,因为properties不支...
  • WJL_MGQS
  • WJL_MGQS
  • 2012年04月03日 12:43
  • 4102

Struts国际化资源文件中文转码

1.先建立中文资源文件内容:  app_temp.properties  login=登陆:  username=用户名:  password=密码:=========================...
  • lip009
  • lip009
  • 2006年09月15日 19:41
  • 1789

struts2国际化---配置国际化全局资源文件并输出国际化资源信息

struts2国际化---配置国际化全局资源文件并输出国际化资源信息
  • m631521383
  • m631521383
  • 2014年11月03日 16:23
  • 2580

iReport与JasperReport中文支持

1 运行环境     1.1 JasperReport    JasperReports是iReport的核心内容。它是一个强有力的开源报表产生工具,可以将内容输出到屏幕上、打印机或生成PDF, HT...
  • kong0609
  • kong0609
  • 2011年03月21日 10:00
  • 2838

struts2--通过超链接动态加载国际化资源文件

原理: 不通过浏览器设置完成语言/地区设置,在jsp页面中通过超链接完成中英文切换。 i18n.jsp页面: English (必...
  • ldw201510803006
  • ldw201510803006
  • 2017年08月15日 14:57
  • 235

struts2中加载资源文件的顺序

据Struts2的文档,当由action加载页面时资源文件的的搜索顺序为: ActionClass.properties  Interface.properties (every interf...
  • wanglikui521
  • wanglikui521
  • 2014年10月11日 21:50
  • 436

struts1.3 资源文件配置和使用

概述类MessageResources可以使开发者方便地支持多语言,包括支持多时间格式和数字格式。使用资源包的另一个好处是允许开发者将标签字符 串集中存储在一个位置,而不是分散在不同的JSP页面里。...
  • niu870781892
  • niu870781892
  • 2011年02月14日 17:51
  • 3258

struts2国际化实现过程(解决中文乱码)

struts2的国际化实现过程--刚开始写的时候按照网上说的那样配置完,结果一测试,乱码。然后     自己在网上查了很多关于struts2国际化乱码的文章,写的都不全面,比如native2asci...
  • q1054261752
  • q1054261752
  • 2015年10月06日 19:27
  • 1634
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts中文(包括资源文件)问题解决方案
举报原因:
原因补充:

(最多只允许输入30个字)