Java Struts2 s:带有特殊字符的url参数未正确解码

Java Struts2 s:带有特殊字符的url参数未正确解码,java,struts2,character-encoding,url-encoding,Java,Struts2,Character Encoding,Url Encoding,我遇到了一些问题,包括在struts2标记中带有特殊字符的参数 中的参数,无论是隐藏字段还是显式字段,都可以正常工作,尽管有些字段可能具有特殊字符,但当我尝试将任何包含特殊字符(在本例中为“é”)的参数附加到struts2URL并触发操作时,问题就来了 这是: 因此,在我看来,它已成功地从视图发送到控制器 我也尝试过像这样指定username参数,但没有成功: <s:url var="urlRegular" action="fetchUserServices" escapeAmp="fal

我遇到了一些问题,包括在
struts2
标记中带有特殊字符的参数

中的参数,无论是隐藏字段还是显式字段,都可以正常工作,尽管有些字段可能具有特殊字符,但当我尝试将任何包含特殊字符(在本例中为“é”)的参数附加到
struts2
URL并触发操作时,问题就来了

这是

因此,在我看来,它已成功地从视图发送到控制器

我也尝试过像这样指定
username
参数,但没有成功:

<s:url var="urlRegular" action="fetchUserServices" escapeAmp="false">
    <s:param name="username" >
      <s:property value="%{username}" />
    </s:param>
    <s:param name="type" value="%{type}"/>
</s:url>
我的
fetchUserServices
方法是这样接收的:cIngl&\eacute;s(没有“\”,我不得不使用它,因为这里使用的标记语言将其解码为cInglés)

现在我有点不知所措了,我的所有页面都指定了
UTF-8
编码,当带有特殊字符的参数进入
标记时,它们不是问题

如何修复此问题并在
fetchUserServices
方法上解码参数



问题更新:尝试了这个建议使用
Spring字符编码过滤器的解决方案
,但它也不起作用。

最后我设法让它起作用。我所要做的就是在8080端口的连接器中指定URI编码,我的tomcat在这里处理请求

我使用的版本是
tomcat7
,我所要做的就是添加
URIEncoding=“UTF-8”
,所以现在看起来像这样:

myPath/fetchUserServices.action?username=cIngl%C3%A9s&type=1
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
这对我来说不是强制性的,因为只说明URI编码的工作方式,不需要包含过滤器,但我已经在网上读到它可以帮助我


关于缺乏理解为什么使用
POST
请求而不使用
GET
请求,我了解到
POST
请求自己指定字符编码,而其他请求不指定字符编码。引自:

请求或响应的默认字符编码是什么 车身?

如果未指定字符编码,则Servlet规范 要求使用ISO-8859-1编码。人物 HTTP消息体(请求或响应)的编码是 在内容类型标题字段中指定。一个这样的例子 标题为内容类型:text/html;charset=ISO-8859-1,其中 说明正在使用默认值(ISO-8859-1)


最后,还有一个解决这个问题的方法,如果您需要更高级的帮助(它涵盖了使用
mysql
的要点,并且需要允许
UTF-8
解码)

使用tomcat@AleksandrM我一定会试试这个,但我不明白为什么参数在
标记(隐藏或不隐藏)中被成功解码。如果这是一个“tomcat”的问题,他们难道不会也无法解码吗?@AleksandrM不起作用。。参数仍然被解码,正如我在问题上声明的那样。。也许这与请求的性质有关。它使用
AJAX
加载dinamic选项卡的内容,目标是我在问题上发布的
URL
。POST参数不受URI编码的影响。您是否可以尝试使用带ajax的普通链接来消除此部分。默认情况下,参数是经过编码的,但是如果您不将其输出到响应中,则可以禁用此参数。
myPath/fetchUserServices.action?username=%5BcIngl%26eacute%3Bs%5D&type=1
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
 <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
 </filter>

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