解决Servlet JSP页面乱码问题

开发 后端
本文介绍解决Servlet JSP页面乱码问题的方法,包括写deal处理页面及代码等。

从form表单提交信息到Servlet JSP页面进行处理的时候,提交的中文信息若不加处理的话就会显示乱码,如一串???。现在通过一个例子来进行总结如下:
写一个用户信息提交页面,通过这个页面向Servlet JSP页面提交用户信息,代码如下:

<%@ page language="java" contentType="text/html; charset=gbk"%> 
<html> 
<head> 
<title>表单提交</title> 
</head> 
<body> 
<form action="deal.jsp" method="post"> 
用户名:<input type="text" name="username"><br> 
密&nbsp;&nbsp;码:<input type="password" name="password"><br> 
爱&nbsp;&nbsp;好:<input type="radio" name="love" value="运动">运动&nbsp;  
<input type="radio" name="love" value="音乐">音乐<br> 
&nbsp;&nbsp;<input type="submit" value="提交"> 
</form> 
</body> 
</html>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

现在写deal处理页面,代码如下:

<%@ page language="java" contentType="text/html; charset=gbk"%> 
<html> 
<head> 
<title>显示用户信息</title> 
</head> 
<body> 
<%  
//request.setCharacterEncoding("gb2312");   
String username = request.getParameter("username");  
//String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"gbk");   
String password = request.getParameter("password");  
//String love = new String(request.getParameter("love").getBytes("iso-8859-1"),"gbk");   
String love = request.getParameter("love");  
%> 
<%= username %>您好,你的密码是:<%= password %>,您的爱好是:<%= love %>!  
</body> 
</html>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

从前面的信息提交页面提交来的信息包含中文,这时就会出现乱码。如:

??????您好,你的密码是:1234569,您的爱好是:????!
现在,把第8行的注释符号去掉,重新执行页面(请确保web服务器会自动加载更改后的页面,否则请重新启动web服务器),这时可以看到正确的中文信息了,如:

王中玉您好,你的密码是:9856322,您的爱好是:音乐!
也可以使用另外一种方法进行处理,把deal.jsp的第8行注释掉,然后把第9行、第13行也注释掉,去掉第10行和第12行的注释符号,保存好重新执行页面(方法同上),同样会显示正常的信息。

下面通过前面的信息提交页面向一个servlet提交信息,然后对其中的中文乱码进行处理。写一个servlet程序(formdeal.java),如下:

package org.wzhongyu;  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
public class formdeal extends HttpServlet {  
public void destroy() {  
super.destroy(); // Just puts "destroy" string in log   
// Put your code here   
}  
public void doGet(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  
this.doPost(request, response);  
}  
public void doPost(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  
//response.setContentType("text/html; charset=gbk");   
PrintWriter out = response.getWriter();  
//request.setCharacterEncoding("gbk");   
String username = request.getParameter("username");  
String password = request.getParameter("password");  
String love = request.getParameter("love");  
out.print("您的用户名:" + username + "<br>"); //   
out.print("您的密码:" + password + "<br>"); //   
out.print("您的爱好:" + love); //   
}  
public void init() throws ServletException {  
// Put your code here   
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

该servlet的部署描述文件(web.xml)如下:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5"   
xmlns="http://java.sun.com/xml/ns/javaee"   
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   
<servlet>   
<description>This is the description of my J2EE component</description>   
<display-name>This is the display name of my J2EE component</display-name>   
<servlet-name>formdeal</servlet-name>   
<servlet-class>org.wzhongyu.formdeal</servlet-class>   
</servlet>   
<servlet-mapping>   
<servlet-name>formdeal</servlet-name>   
<url-pattern>/servlet/formdeal</url-pattern> 
</servlet-mapping> 
</web-app> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

把信息提交页面的第7行改为:

<form action="./servlet/formdeal" method="post"> 
  • 1.

重新部署并执行页面,同样看到显示的中文信息是乱码。现在把第23行的注释符去掉,重新执行会看到下面的信息,提交过来的中文信息是乱码: 您的用户名:??????
您的密码:123465
您的爱好:????把第25行的注释符也去掉,重新执行,可以看到可以显示正常的信息了,如下: 您的用户名:王中玉
您的密码:5632215
您的爱好:音乐如果只去掉第25行的注释,执行程序则会显示下面的信息: ?????????
?????123456 ???????

由此可见,这个两个都不可以忽略掉,也可以从下面的方式验证必须写上两个,把formdeal.java里的第29,30,31行的中文换成英文,同样注释掉第23行,而不要注释掉第25行,执行后显示的信息如下:

username???  
password65462458  
love??  
  • 1.
  • 2.
  • 3.

这是由于没有设置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"); 
  • 1.
  • 2.

以上是Servlet JSP页面乱码修改方法,这样也可以正常显示中文信息。

【编辑推荐】

  1. Servlet引擎的安装
  2. 配置Servlet开发环境
  3. 标签库中JSP Servlet调用
  4. 学习Java Servlet时遇到的小问题
  5. Servlet在session中共享链接
责任编辑:佚名 来源: IT168
相关推荐

2009-07-07 18:20:54

JSP页面显示乱码

2009-06-30 15:22:55

JSP页面

2012-06-19 14:35:24

JSPJava乱码

2009-07-01 18:14:36

JSP乱码

2009-07-02 13:26:32

JSP中文乱码

2009-07-06 17:50:13

Java JSP

2009-07-06 09:49:26

Servlet JSP

2009-07-01 18:05:54

JSP中文乱码

2009-06-30 13:49:21

excel文档Jsp

2009-07-07 13:29:33

Servlet和JSP

2010-08-06 10:49:16

FlexJsp

2012-06-29 13:31:56

ServletJSPJava

2009-07-03 14:02:51

2009-07-01 17:34:03

Servlet和JSP

2009-06-30 17:26:56

JSP页面

2009-08-10 09:19:28

Servlet JSP

2010-02-06 16:13:49

Ubuntu Auda

2009-07-08 16:10:36

Servlet和JSPJSP页面

2012-03-21 10:16:31

JavaJSP

2011-05-17 15:03:34

JSP
点赞
收藏

51CTO技术栈公众号