这个话题其实已经不新了,现在的系统开发基本遇不到中文乱码,因为有了struts2(struts2.1.6中还是存在需要通过filter解决) ,但由于种种原因在你开发过程中还是会遇到类似的问题。最近的项目由于无法采用现成的框架只能用最原始的方法了,jsp+servlet用eclipse开发。虽然有点痛苦但还是顺利完成了。其中就遇到中文乱码问题,让我花了一个多小时才算搞定。把他记录下来希望对后来的朋友有用。
直接上代码了首先要确保你的jsp页面的pageEncoding="UTF-8"在servlet文件的service方法中的代码如下(我的servlet类的全名称为:com.ibm.crl.comaple.servletTest.MyTransfer):
@Override
protected void service(HttpServletRequest request,
HttpServletResponse reponse) throws ServletException, IOException {
// 只要在页面改过编码格式了,这里就不用在改了。
// request.setCharacterEncoding("UTF-8");
// reponse.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession(true);
session.setAttribute("message", "my message!");
// super.service(arg0, arg1);要确保这句话被注释掉,要不直接放在代码最后面即可。
PrintWriter writer = reponse.getWriter();
writer.write("obj");
//一定要编码后再传输
String parameter = URLEncoder.encode("这是转发过来的参数!", "UTF-8");
//我采用的是后台重定向方式转向另一个页面并在该页面接收该参数,这和页面直接请求url地址是一样的。
reponse.sendRedirect("MyJsp.jsp?name=" + parameter);
}
注释已经很详细了相信不用我解释什么了吧,呵呵!接下来就是在web.xml中配置servlet代码如下:
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.ibm.crl.comaple.servletTest.MyTransfer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/helloServelt</url-pattern>
</servlet-mapping>
下面是我的jsp页面代码简单:
<%
String message = session.getAttribute("message").toString();
byte[] cs = request.getParameter("name").getBytes("ISO-8859-1");
String prename = new String(cs,"utf-8");
System.out.println(prename);
%>
<%=message%>
<br />
<%=prename%>
这样就完成了整个过程,是不是很简单吧。还有一点要说明就是,在通过request对象接收参数时,由于其默认采用的是ISO-8859-1编码所以首先要获得该编码的
字节流数组然后再采用UTF-8编码方式转换为字符串即可得到你想要的中文参数了。