如何让Servlet接受从JSP传递的非ASCII字符(阿拉伯语、中文等)?
我尝试在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和Linux两个系统上都使用tomcat 5.0.28/6.x.x和JDK1.6。
以下是一个示例: 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页面的值是正确的。
在我运行此测试的机器上打印的“???”是一个问题。 我在另一台机器上运行了相同的示例,它可以正常工作!