java Ajax到Servlet,URI编码的查询字符串
我有一个java web项目,在Apache Tomcat上运行Servlet 2.4
在我的servlet中,我设置了request.setCharacterEncoding("utf-8")
,并使用了<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
In HTML head标记
项目中的所有文件(Java、JS等)都将文本文件编码设置为utf-8
。我还添加了一个映射到web.xml
中所有servlet的过滤器,它将字符编码设置为utf-8
当向使用jQuery的web服务器和html表单上的serialize方法发出ajax请求(get和post)时,Servlet无法检索特殊的utf-8
字符
可能是因为它需要UTF-8
并得到URLencoded字符串?有人对此有什么建议吗
# 1 楼答案
当HTML页面本身由真正的HTTP请求提供服务时,HTML头中的Meta
http-equiv
标记被忽略。而是使用HTTP响应头中提供的信息。metahttp-equiv
标记仅在页面未通过http://
URI作为HTTP资源获取时使用,例如通过file://
URI获取本地磁盘文件系统,当最终用户将获取的HTML文件保存到磁盘文件系统并通过文件资源管理器从那里重新打开时,可能会发生这种情况现在,您可能应该知道为什么该属性的调用方式与此完全相同:
http-equiv
,就像在“HTTP等效”中一样因此,需要在真正的HTTP响应头中设置内容类型和字符编码。这可以通过在JSP顶部放置以下行来实现:
或者,如果您打算在一个地方将其应用于webapp的所有JSP,而不是在所有文件上复制粘贴相同的JSP,那么请将以下内容放入webapp的
web.xml
:请注意,我假设您以正确的方式发送jQuery ajax请求,并且使用
$.serialize()
或encodeURIComponent()
对参数进行了正确的URI编码另请参见: