`
wzhongyu
  • 浏览: 23075 次
  • 性别: Icon_minigender_1
  • 来自: 美丽春城
社区版块
存档分类
最新评论

JSP&Servlet处理参数中的中文乱码总结

阅读更多

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

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

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

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

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

??????您好,你的密码是:1234569,您的爱好是:????! 

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

啊拉拉您好,你的密码是:9856322,您的爱好是:音乐! 

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

        下面通过前面的信息提交页面向一个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");

这样也可以正常显示中文信息。

分享到:
评论

相关推荐

    解决jsp+servlet开发中的中文乱码问题

    通过在JSP页面、Servlet以及表单处理中设置合适的字符集,可以有效地避免中文乱码问题,提高系统的稳定性和用户体验。在实际开发过程中,建议始终采用UTF-8字符集,因为它支持全球几乎所有语言的字符,能够很好地...

    servlet与jsp中文乱码处理

    下面将详细阐述servlet和jsp中文乱码的处理方式。 1. **理解编码基础** - **Unicode**:全球统一的字符编码标准,包含了世界上几乎所有的字符。 - **UTF-8**:最常用的Unicode编码方式,它以字节为单位进行编码,...

    jsp传参 servlet接收中文乱码问题的解决方法.docx

    jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...

    Jsp和Servlet中文乱码问题

    尤其是在使用Java Server Pages(JSP)和Servlet进行中文处理时,字符编码的设置不当往往会导致页面显示出现乱码。本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的...

    Servlet及jsp解决中文乱码问题

    本文将详细介绍如何在Servlet与JSP中彻底解决中文乱码问题,并给出具体的解决方案。 #### 二、中文乱码的原因分析 中文乱码主要由以下几个原因引起: 1. **服务器端编码设置不正确**:如果服务器端的字符集设置与...

    jsp+servlet+mysql乱码解决的这天

    该方案的解决方法可以解决jsp+servlet+mysql开发中常见的中文乱码问题,确保中文字符的正确显示。 jsp+servlet+mysql乱码解决方案的实现步骤如下: 首先,在jsp页面中设置编码格式为utf-8,以确保页面中的中文字符...

    servlet中文乱码问题

    通过修改Tomcat配置文件中的`URIEncoding`属性以及在Servlet中通过`response.setContentType()`和`request.setCharacterEncoding()`方法来设置字符编码,可以有效解决中文乱码问题。此外,还可以通过字符集转换的...

    javaweb servlet(jsp)的乱码问题原理及解决

    ### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...

    JSP中文乱码处理JSP中文乱码处理

    【JSP中文乱码处理详解】 在Web开发中,JSP中文乱码是一个常见的问题,主要涉及页面显示、表单提交以及数据库操作等环节。理解并掌握这些环节的编码处理至关重要,以确保数据的准确性和用户体验。 1. **JSP文件的...

    如何配置Filter过滤器处理JSP中文乱码

    【如何配置Filter过滤器处理JSP中文乱码】 在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP...

    JSP中文乱码问题解决总结

    在IT行业中,尤其是在Web开发领域,JSP(JavaServer Pages)是常见的动态网页技术,而中文乱码问题一直是开发者们经常遇到的困扰。本篇文章将深入探讨JSP中文乱码问题的原因、解决策略以及预防措施。 一、乱码产生...

    jsp页面传值中文乱码问题处理.docx

    jsp页面传值中文乱码问题处理 在 JSP 页面中传值时,中文字符可能会出现乱码问题,这是由于字符编码不一致所引起的。下面将详细讲解 JSP 中文乱码种类和解决方案。 JSP 文件中文内容显示乱码 在 JSP 文件中,如果...

    Servlet中的中文乱码问题

    然而,处理中文字符时,Servlet经常会出现乱码问题,这通常是由于字符编码设置不正确导致的。本篇文章将深入探讨如何解决Servlet中的中文乱码问题,以及如何在GBK、UTF-8和ISO-8859-1之间做出合理的选择。 首先,...

    jsp和servlet操作mysql中文乱码问题的解决办法.docx

    在 JSP 和 Servlet 操作 MySQL 过程中,中文乱码问题是一个常见的问题,而解决这个问题需要从多方面入手,包括 JSP 页面、Servlet 编程和 Filter 配置等。本文将详细介绍解决 JSP 和 Servlet 操作 MySQL 中文乱码...

    JSP页面中文乱码几个解决办法

    总结来说,解决JSP页面中文乱码问题的关键在于保持字符编码的一致性,从编辑器保存文件的编码、JSP页面的编码声明、Servlet的响应编码、POST请求的参数编码,到服务器处理GET请求的编码,都需要进行适配和统一。...

    jspservlet取参数乱码问题分析

    在Java Web开发中,尤其是在处理中文参数时,经常会遇到一个常见问题——**jspservlet取参数乱码**。这一现象通常发生在当用户从客户端提交包含中文字符的表单至服务器端时,服务器端接收到的参数显示为乱码。这种...

    jsp 过滤器中文乱码的处理

    总结来说,JSP中的中文乱码问题可以通过设定请求的字符编码来解决,而过滤器提供了一种全局、高效的方式来处理这类问题。通过自定义过滤器并在`web.xml`中配置,我们可以确保所有请求都以正确的字符集处理,同时过滤...

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    总结,"超强过滤器"是解决JSP-Servlet之间中文参数GET-POST传递问题的有效手段,通过统一设定请求的字符编码,确保在整个Web应用中中文数据能够正确无误地传输和处理。对于大型项目,这样的全局解决方案可以大大提升...

    JSP利用过滤器解决request中文乱码问题.docx

    JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用过滤器解决JSP中request中文乱码问题。 ...

Global site tag (gtag.js) - Google Analytics