Tomcat中的Grails请求参数编码问题
Posted
技术标签:
【中文标题】Tomcat中的Grails请求参数编码问题【英文标题】:Grails request parameters encoding issue in Tomcat 【发布时间】:2012-02-29 01:50:35 【问题描述】:我的 grails 应用无法正确解码请求参数。
在 config.groovy 中:
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding =
"UTF-8"
我所有的 gsp 在 page 指令中使用 contentType="text/html; charset=UTF-8"
以及在 head 元素中使用 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
。
但是,当我从控制器中的 param 对象接收到发布的参数时,应用程序只会打印垃圾...
我使用的是通过 Tomcat 5 部署的 Grails 1.3.7 版本。除了 tomcat 之外的其他已安装插件:
休眠 1.3.7 jQuery 1.7.1 弹簧安全核心 1.2.6 webxml 1.4
编辑:通过进一步调试,我注意到该应用程序将在码头中运行良好。因此我怀疑它一定是一个tomcat问题。我的问题与to this post 类似(可惜我没有使用 Shiro 插件)。
有人可以帮忙吗?
【问题讨论】:
数据库中的内容是垃圾,还是只是打印出来的内容?你有没有安装 webxml 插件(运行grails list-plugins --installed
)?
从进一步调试来看,问题出在 Web 层。提交的值到达控制器时已经是垃圾了。
我安装的插件有:hibernate 1.3.7、tomcat、jquery 1.7.1、spring-security-core 1.2.6、webxml 1.4
【参考方案1】:
你需要将URIEncoding='UTF-8'
添加到conf/server.xml中的Connector
元素,例如
<Connector port='8080' protocol='HTTP/1.1' connectionTimeout='20000'
redirectPort='8443' URIEncoding='UTF-8' />
这里有描述:https://wiki.apache.org/tomcat/FAQ/CharacterEncoding
【讨论】:
感谢您的回复。我的问题实际上是 POST 参数。如果我正确理解了常见问题解答,URIEncoding 仅适用于 GET 参数。尽管如此,我试了一下,但也没有用。这可能是一个很长的镜头,但它可能是我生成的 web.xml 中过滤器的顺序吗?在那里我按顺序有以下过滤器:springSecurityFilterChain -> sitemesh -> charEncodingFilter -> urlMapping -> hiddenHttpMethod -> grailsWebRequest 抱歉,我没有发现您正在使用 webxml 1.4 - 您需要使用 1.4.1 来修复此 charEncodingFilter 订单错误。您还需要升级到更高版本的 Spring Security Core,因此您应该使用 1.2.7.2(最新)。 感谢伯特的所有帮助。 @BurtBeckwith 有没有办法直接在 Grails 中将此URIEncoding
设置为 UTF-8
,这样我们就不必将此更改应用于每个服务器中的 tomcat?
不,您不能从 war 文件中配置服务器。【参考方案2】:
edit application.properties
add(update) line:
plugins.webxml=1.4.1
【讨论】:
【参考方案3】:由于没有最终结论,我想分享我在相同情况下的经验。 Here 可以找到更多讨论。
我的情况是,我在本地 pc 上的 windows 下有开发环境,包括本地 mysql。生产环境 - Apache 后面的 Centos 6、MySQL、Tomcat 6。
在开发环境中 - 一切正常,但在生产环境中 - 没有。
唯一对我有帮助的东西 - 还设置了 autoreconnect=true&useUnicode=true&characterEncoding=UTF-8
来推荐 Tomcat URIEncoding='UTF-8'
所以,问题出在正确的 java Driver for MySQL 设置中。
【讨论】:
以上是关于Tomcat中的Grails请求参数编码问题的主要内容,如果未能解决你的问题,请参考以下文章