下面通过前面的信息提交页面向一个servlet提交信息,然后对其中的中文乱码进行处理。写一个servlet程序(formdeal.java),如下:
1package org.wzhongyu; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5import javax.servlet.ServletException; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10public class formdeal extends HttpServlet { 11 public void destroy() { 12 super.destroy(); // Just puts "destroy" string in log 13 // Put your code here 14 } 15 16 public void doGet(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 this.doPost(request, response); 19 } 20 21 public void doPost(HttpServletRequest request, HttpServletResponse response) 22 throws ServletException, IOException { 23 //response.setContentType("text/html; charset=gbk"); 24 PrintWriter out = response.getWriter(); 25 //request.setCharacterEncoding("gbk"); 26 String username = request.getParameter("username"); 27 String password = request.getParameter("password"); 28 String love = request.getParameter("love"); 29 out.print("您的用户名:" + username + "<br>"); // 30 out.print("您的密码:" + password + "<br>"); // 31 out.print("您的爱好:" + love); // 32 } 33 public void init() throws ServletException { 34 // Put your code here 35 } 36} 37
该servlet的部署描述文件(web.xml)如下:
1<?xml version="1.0" encoding="UTF-8"?> 2<web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <servlet> 8 <description>This is the description of my J2EE component</description> 9 <display-name>This is the display name of my J2EE component</display-name> 10 <servlet-name>formdeal</servlet-name> 11 <servlet-class>org.wzhongyu.formdeal</servlet-class> 12 </servlet> 13 14 <servlet-mapping> 15 <servlet-name>formdeal</servlet-name> 16 <url-pattern>/servlet/formdeal</url-pattern> 17 </servlet-mapping>18</web-app>
把信息提交页面的第7行改为:
<form action="./servlet/formdeal" method="post">
重新部署并执行页面,同样看到显示的中文信息是乱码。现在把第23行的注释符去掉,重新执行会看到下面的信息,提交过来的中文信息是乱码: 您的用户名:??????
您的密码:123465
您的爱好:????把第25行的注释符也去掉,重新执行,可以看到可以显示正常的信息了,如下: 您的用户名:王中玉
您的密码:5632215
您的爱好:音乐如果只去掉第25行的注释,执行程序则会显示下面的信息: ?????????
?????123456 ???????
由此可见,这个两个都不可以忽略掉,也可以从下面的方式验证必须写上两个,把formdeal.java里的第29,30,31行的中文换成英文,同样注释掉第23行,而不要注释掉第25行,执行后显示的信息如下:
username??? password65462458 love??
这是由于没有设置servlet响应的页面的字符编码造成的。
在servlet里也可以这样进行处理,把第25行注释掉,而不要注释第23行,把第26行和第28行分别改为如下代码:
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"gbk"); String love = new String(request.getParameter("love").getBytes("iso-8859-1"),"gbk");
这样也可以正常显示中文信息。