如何让servlet接受从JSP传递的非ascii(Arabian,chines等)字符?
我尝试将以下内容添加到JSP的顶部:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
并在servlet中的每个post / get方法中添加以下内容:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
我尝试添加一个执行上述两个语句而不是servlet的过滤器。
说实话,这些过去是有效的,但现在它不再起作用了。
我在Win&amp; amp;和JDK1.6上使用tomcat 5.0.28 / 6.x.x Linux盒子。
这是一个例子: JSP页面:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Push Engine</title>
</head>
<body>
Hello ${requestScope['val']}
<form action="ControllerServlet" method="POST">
<table>
<tr>
<td>ABC</td>
<td><input name="ABC" type="text" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>
Servlet doGet方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String val = "request.getParameter('ABC') : " + request.getParameter("ABC");
System.out.println(val);
request.setAttribute("val", val);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
问题是: 在控制台中,值“???”然而,正在打印的值返回到包含正确Unicode字
的JSP页面“???”打印到控制台是我运行此测试的机器中的问题。 我在另一台机器上运行了相同的例子,它运行正常!
答案 0 :(得分:8)
到目前为止,您需要设置request encoding。
对于GET请求(其中参数通过请求URL传递),您需要在appserver级别配置它。例如,Tomcat 6.0就足以将URIEncoding
中<Connector>
元素的/conf/server.xml
属性设置为UTF-8
。
<Connector (...) URIEncoding="UTF-8" />
对于POST请求(其中参数“无形地”通过请求正文),您需要在收集任何请求参数之前使用UTF-8
调用ServletRequest#setCharacterEncoding()
。最好的地方是在一个过滤器中,它被称为链中的第一个过滤器:
if (request.getCharacterEncoding() == null) {
request.setCharacterEncoding("UTF-8");
}
chain.doFilter(request, response);
答案 1 :(得分:0)
设置页面的内容类型是从服务器到浏览器的通信,关于服务器发送它的内容,这对你没什么帮助。您需要确保的是,您的客户端到服务器通信具有正确的字符编码,并且您的服务器使用正确的语言环境运行。您设置的精确方式取决于您使用的框架以及服务器的配置方式;首先要做的是确保您的服务器在环境中使用正确的区域设置启动(可能是LC_ALL
变量)。
请注意,客户端可能会尝试告诉您的服务器它想要的区域设置,这是您的框架可能会帮助您的东西。 (它是HTTP请求中的标头。)
答案 2 :(得分:0)
if (request.getCharacterEncoding() == null) { request.setCharacterEncoding("UTF-8"); }
这对我有用。 我在JSP META标记中设置了charset = UTF-8,并在servlet中添加了上面的代码。 在此之后,它已在Oracle数据库中正确保存了阿拉伯语数据