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>