此文章涉及两方面:
1、JSP页面中文问题
2、表单的method使用post与get的比较
JSP中输入的中文默认是使用的ISO-8859-1编码,需要转换:
<%!
public String codeToString(String str){
String s=str;
try{
byte[] bytes=s.getBytes("ISO-8859-1");
s=new String(bytes);
return s;
}catch(Exception e){
return s;
}
}
%>
先说说HTTP协议之HTTP请求格式:
HTTP请求格式:
* HTTP协议规定,HTTP请求由3部分构成,分别是:
* 请求方式、URI、HTTP协议的版本
* 请求头(Request Header)
* 请求正文(Request Content)
*
*下面是一个HTTP请求的例子:
*POST /hello.htm HTTP/1.1
*Accept:image/gif,image/jpeg,*\/*
*Referer:http://localhost/login.htm
*Accept-Language:en,zh-cn;q-0.5
*Content-Type:application/x-www-form-urlencoded
*Accpet-Encoding:gzip,deflate
*User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.0)
*Host:localhost
*Content-Length:43
*Connection:Keep-Alive
*Cache-Control:no-cache
* (空一行)
*username=weiqin&password=1234&submit=submit
*
* 1.请求方式、URI、HTTP协议的版本
*HTTP请求的第一行包括请求方式、URI和协议版本3项内容,以空格分开:
* POST /hello.htm HTTP/1.1
*在以上代码中,"POST"表示请求方式,"/hello.htm"表示URI,"HTTP/1.1"表示HTTP协议版本。
* 根据HTTP协议,HTTP请求可以使用多种请求方式。
* GET:这种请求方式最为简单,客户程序可以通过这种请求方式访问服务器上的***一个文档**,
*服务器把文档发送给客户程序。
* POST:客户程序可通过这种方式发送大量信息给服务器。在HTTP请求中处了包含要访问的文档的URI外,
*还包括大量的***请求正文***,这些请求正文中通常还包含大量HTML表单数据。
* HEAD:客户程序和服务器之间交流一些内部数据,服务器不会返回具体的文档。 当使用GET和POST方法时,
*服务器最后都将特定的文档返回给客户程序,而HEAD请求方式则不同,它仅仅交流一些内部数据,这些数据不会
*影响用户浏览网页的过程,可以说对用户是透明的。 HEAD请求方式通常不单独使用,而是为其他请求方式起辅助作用。
*一些搜索引擎使用HEAD请求方式来获得网页的标志信息,还有一些HTTP服务器进行安全认证时,用这个方式来传递认证信息。
* PUT:客户程序通过这种方式把文档上传给服务器。
* DELETE:客户程序通过这种方式来删除远程服务器上的某个文档。客户程序可以利用PUT和DELETE请求方式来
*管理远程服务器上的文档。
*
* 2.请求头(Request Header)
* 请求头包含许多有关客户环境和请求正文的有用信息。例如,请求头可以声明浏览器的类型、所用的语言、请求正文的类型,
*以及请求正文的长度等:
* Accept:image/gif,image/jpeg,*\/*
* Referer:http://localhost/login.htm
* Accept-Language:en,zh-cn;q-0.5
* Content-Type:application/x-www-form-urlencoded
* Accpet-Encoding:gzip,deflate
* User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.0)
* Host:localhost
* Content-Length:43
* Connection:Keep-Alive
* Cache-Control:no-cache
*
* 3. 请求正文(Request Content)
* HTTP协议规定,请求头和请求正文之间必须以空行分割(只有CRLF符号的行),这个空行非常重要,它表示请求头已经结束,
*接下来是请求正文。请求正文中可以包含客户***以!POST!方式提交的表当数据***
* username=weiqin&password=1234&submit=submit
*
*CRLF(Carriage Return Linefeed)是指回车符和行结束符"\r\n"
实际例子:
JSP页面:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<form name="helloForm" method="get" action="hi.hello">
<table>
<tr>
<td><div align="right">朋友名:</div></td>
<td><input type="text" name="clientName"/></td>
</tr>
<tr><td></td>
<td><input type="Submit" name="submit" value="提交"/></td>
</tr>
</table>
</form>
对应的HttpServlet子类:
package mypack;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet //step1:扩展HttpServlet抽象类。
{
//step2:覆盖doGet()
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException ,ServletException
{
//step3:获取HTTP请求中的参数信息。
String clientName=request.getParameter("clientName");
if(clientName!=null){
clientName=new String(clientName.getBytes("ISO-8859-1"),"GB18030"); //编码转换,clientName按ISO-8859-1解码为(Unicode)字节,将得到的(Unicode)字节再按GB18030编码
}
else
clientName="我的朋友";
//step4:生成HTTP响应结果。
PrintWriter out;
String title="HelloServlet";
String heading1="This is output from helloservlet by doGet";
//set content type. 设置"输出响应数据"内容content的字符编码
response.setContentType("text/html;charset=GB18030");
//write html page.使用PrintWriter实例将内容输出到HTML 页面!
out=response.getWriter();
out.print("<HTML><HEAD><TITLE>"+title+"</TITLE>");
out.print("</HEAD><BODY>");
out.print(heading1);
out.println("<h1><p>"+clientName+":你好</h1>");
out.print("</BODY></HTML>");
//close out
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException ,ServletException{
//step3:获取HTTP请求中的参数信息。
String clientName=request.getParameter("clientName");
if(clientName!=null){
//(clientName的)字符编码转化
//clientName=new String(clientName.getBytes("ISO-8859-1"),"UTF8");
clientName=new String(clientName.getBytes("ISO-8859-1"),"GB18030"); //编码转换,clientName按ISO-8859-1解码为(Unicode)字节,将得到的(Unicode)字节再按GB18030编码
}
else
clientName="我的朋友";
//step4:生成HTTP响应结果。
PrintWriter out;
String title="HelloServlet";
String heading1="This is output from helloservlet by doGet";
//set content type. 设置"输出响应数据"内容content的字符编码
//response.setContentType("text/html;charset=UTF8");
response.setContentType("text/html;charset=GB18030");
//write html page.使用PrintWriter实例将内容输出到HTML 页面!
out=response.getWriter();
out.print("<HTML><HEAD><TITLE>"+title+"</TITLE>");
out.print("</HEAD><BODY>");
out.print(heading1);
out.println("<h1><p>"+clientName+":你好</h1>");
out.print("</BODY></HTML>");
//close out
out.close();
}
}
当输入中文时method=get时显示乱码
当输入中文时method=post时中文正常显示
我的解释:
forrest:
* 原因很简单,就是当请求方式是GET时,并不把表单数据封装在请求信息的正文中,请求的只是简单的想获取 并不发送信息给服务器,
*并没有将(表单等)信息 传递给HTTP服务器,所以服务器在通过HttpServletRequest检索不到客户端在页面上输入的信息。
通过POST时,除了请求外,还外加发送信息给服务器,所以服务器可以通过HttpServletRequest检索到客户端在页面上输入的信息
(POST方式将页面上的表单数据封装在HttpServletRequest中作为请求信息发给了服务器程序)。
* 可以从IE的输入栏:
http://127.0.0.1:8080/TomcatAndJavaWeb_cp2_helloapp/hi.hello?clientName=%C5%ED%C1%D5&submit=%CC%E1%BD%BB为method=get
http://127.0.0.1:8080/TomcatAndJavaWeb_cp2_helloapp/hi.hello为method=post
得到佐证
当使用method=get服务器程序根本就得不到客户的额外请求信息(表单中的信息)。
我输入的clientName对应信息是 彭琳qw123
http://127.0.0.1:8080/TomcatAndJavaWeb_cp2_helloapp/hi.hello?clientName=%C5%ED%C1%D5qw123&submit=%CC%E1%BD%BB
但是通过HttpServletRequest request.getParameter("clientName")还是得到了数据����qw123,这是怎么回事?
中文被进行了转换,彭琳qw123:%C5%ED%C1%D5qw123
分享到:
相关推荐
JSP 中文乱码问题解决办法 JSP 页面中中文乱码问题是指在 JSP 页面中使用中文时,页面显示...解决 JSP 中文乱码问题需要从多方面入手,包括设置页面的字符编码、使用 POST 方式提交表单、使用 GET 方式提交表单等。
jsp中文乱码问题详解 在jsp中文乱码问题中,乱码的出现是由于编码格式不一致所导致的。在jsp文件中,存在三个地方的编码格式:jsp文件的存储格式、解码格式和控制浏览器的解码方式。如果这三个地方的编码格式不一致...
然而,在处理中文参数时,尤其是通过GET和POST方法传递时,经常会出现乱码问题。这通常是由于字符编码不一致或者处理不当导致的。以下是对这一问题的详细解析: 首先,我们需要理解字符编码的基本概念。在Web中,...
解决JSP页面在Eclipse中的乱码问题,关键是确保所有涉及的地方(包括JSP页面、IDE、服务器以及客户端)都使用相同的编码标准。通过上述步骤的操作,可以有效地避免乱码问题的发生,提升Web应用的质量和用户体验。
在Web开发中,JSP中文乱码是一个常见的问题,主要涉及页面显示、表单提交以及数据库操作等环节。理解并掌握这些环节的编码处理至关重要,以确保数据的准确性和用户体验。 1. **JSP文件的编码与保存** JSP文件本质...
本文将深入探讨如何处理POST和GET提交时的乱码问题,以确保网页显示正常,避免出现中文或者其他非ASCII字符的乱码现象。 首先,我们要理解POST和GET的区别。POST请求通常用于向服务器发送大量数据或修改服务器资源...
【JSP中文乱码问题综述】 在JSP开发中,中文乱码是一个常见的问题,主要是由于编码不一致和处理不当导致的。Java语言和JSP文件基于Unicode,但保存和处理时可能会采用不同的编码,这就会引发乱码。本文将深入探讨...
jsp页面传值中文乱码问题处理 在 JSP 页面中传值时,中文字符可能会出现乱码问题,这...JSP 页面传值中文乱码问题可以通过修改编码方式、设置输出编码、接收参数编码、Get 提交编码和数据库连接参数编码等方式来解决。
在JAVA Web开发中,中文乱码问题是一个常见的挑战,尤其对于那些处理中文输入和输出的系统。这主要涉及到字符编码的正确设置和处理。本文将深入探讨这个问题,并提供解决策略。 1. **字符编码基础** - **字符集与...
本篇文章将详细介绍如何解决JSP页面提交时出现的乱码问题,包括GET请求和POST请求两种常见的情况。 #### 一、问题背景与分析 1. **GET请求乱码**: - GET请求是通过URL来传递参数的,这些参数通常会以编码的形式...
在Web开发中,尤其是涉及到Java和JSP的项目,中文乱码问题常常困扰着开发者。本文将深入探讨这个问题,提供解决方案。 首先,我们需要理解乱码的根源。乱码通常由于字符编码不一致导致,尤其是在JSP文件中,不同的...
### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...
综上所述,解决JSP中的中文乱码问题主要涉及以下几个方面:合理设置JSP文件和响应的编码方式、注意文件头部的BOM、确保客户端和服务器端之间的编码方式一致、正确处理GET和POST请求中的中文参数。通过上述措施,可以...
JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用过滤器解决JSP中request中文乱码问题。 ...
### jsp乱码解决方案 #### 一、引言 在Web开发中,特别是使用Java Server Pages (JSP)进行开发时,字符编码问题是一个经常遇到的技术难题。如果处理不当,很容易导致网页显示乱码,影响用户体验及数据的正确性。...
### 解决JSP中文乱码问题 在JSP(web应用的一种技术)开发过程中,中文乱码问题是开发者常常遇到的问题之一,特别是在处理用户提交的数据时。本文将详细介绍如何解决JSP中中文乱码的问题,包括页面传递中文参数时可能...
在JSP开发过程中,中文乱码问题是一个常见的技术难题,尤其在处理客户端与服务器之间的数据交互时更为突出。本文将详细介绍几种有效的解决方案,帮助开发者应对各种场景下的乱码问题。 #### 一、解决服务器响应中文...
总结来说,解决JSP页面中文乱码问题的关键在于保持字符编码的一致性,从编辑器保存文件的编码、JSP页面的编码声明、Servlet的响应编码、POST请求的参数编码,到服务器处理GET请求的编码,都需要进行适配和统一。...