struts2中文乱码

以前在使用webwork2.2.6,今天换了struts2试试,版本struts2.1.6。根据官方包下给的例子配置action拦截器时总是对中文不能很好的支持。

官方web.xml配置如下

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 

或者使用官方的另一配置

<filter>
		<filter-name>struts-prepare</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
		<init-param>
			<param-name>actionPackages</param-name>
			<param-value>org.apache.struts2.showcase.person</param-value>
		</init-param>
	</filter>

	<filter>
		<filter-name>struts-execute</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
	</filter>

测试的其他环境编码: tomcat5.5 编码utf-8、测试页面编码 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

form表单:

<s:form action="Login_save" method="post" name="saveForm">
	<s:textfield name="name" label="用户名" />
	<s:password name="password" label="密码" />
	<s:submit value="提交" />
</s:form>

使用以上配置在进行表单提交时总是对中文显示乱码,当将method="post"该为method="get"时该问题不存在。

google了下,说要设置struts.locale和struts.i18n.encoding,但设置后并未有任何效果。该设置在struts.xml和struts.properties中均做过测试,未通过。也有说要设置org.springframework.web.filter.CharacterEncodingFilter

(详见:http://ywlqi.javaeye.com/blog/323589),该方式未经测试。

想到在使用webwork中并未进行如此配置,但均不会出现问题。考虑到struts2和webwork的关系,遂将web.xml 中的action拦击改为

<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

同时不用设置struts.locale和struts.i18n.encoding,问题解决。

另,如系统使用的是GBK或是其他编码,除了在页面、服务器(tomcat)中设置相应的编码外,还要在struts.xml中增加 <constant name="struts.i18n.encoding " value="系统编码" />或是在struts.properties中添加struts.i18n.encoding = 系统编码。如果没搞错的话struts2.1.6默认是对utf-8支持的。

至于是什么问题引起该中问题,目前尚不清楚。待后续继续查找了。(ps:应该是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter的问题

注:在运行struts2.1.6的struts2-showcase-2.1.6例子中personManamger中,创建一个中文用户时系统出现乱码,是否可以推断官方在struts2.1.6包携带的例子中并未解决中文编码问题。

 

转载于:https://my.oschina.net/yeelee/blog/650894

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值