servlet中文乱码问题

     这个话题其实已经不新了,现在的系统开发基本遇不到中文乱码,因为有了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编码方式转换为字符串即可得到你想要的中文参数了。

你可能感兴趣的:(eclipse,jsp,struts,String,servlet,service)