servlet读取表单数据和返回页面时的中文乱码问题
2006-11-09 00:34
573 查看
用myeclipse做了一个最简单的表单处理servlet,可是竟然出了N多错误.
MyHtml.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
Front end to ThreeParams servlet.
Taken from Core Servlets and JavaServer Pages 2nd Edition
from Prentice Hall and Sun Microsystems Press,
http://www.coreservlets.com/.
(C) 2003 Marty Hall; may be freely used or adapted.
-->
<HTML><HEAD><TITLE>Collecting Three Parameters</TITLE></HEAD>
<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">参数例子</H1>
<FORM ACTION="/ThreeParameters/servlet/ThreeParameters " ><--要包含工程名字,不用包含servlet的包名-->
First Parameter: <INPUT TYPE="TEXT" NAME="param1"><BR>
Second Parameter: <INPUT TYPE="TEXT" NAME="param2"><BR>
Third Parameter: <INPUT TYPE="TEXT" NAME="param3"><BR>
<CENTER><INPUT TYPE="SUBMIT"></CENTER>
</FORM>
</BODY></HTML>
ThreeParameters.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** Simple servlet that reads three parameters from the
* form data.
* <P>
* Taken from Core Servlets and JavaServer Pages 2nd Edition
* from Prentice Hall and Sun Microsystems Press,
* http://www.coreservlets.com/.
* © 2003 Marty Hall; may be freely used or adapted.
*/
public class ThreeParameters extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=/"GBK/"");
PrintWriter out = response.getWriter();
String title = "Reading Three Request Parameters";
String docType =
"<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 " +
"Transitional//EN/">/n";
// request.setCharacterEncoding("GB2312");这句话在这里没有用。因为GET请求的参数及其值都是通过URL加密传输的。只要把浏览器的编码设置成GBK即可。当用POST请求时,这句话才起作用(防止服务器得到的参数及参数值是乱码)。究竟服务器是怎么读取客户端数据的,还是不很明白。
out.println(docType +
"<HTML>/n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>/n" +
"<BODY BGCOLOR=/"#FDF5E6/">/n" +
"<H1 ALIGN=/"CENTER/">" + title + "</H1>/n" +
"<UL>/n" +
" <LI><B>参数1</B>: "
+ request.getParameter("param1") + "/n" +
" <LI><B>param2</B>: "
+ request.getParameter("param2") + "/n" +
" <LI><B>param3</B>: "
+ request.getParameter("param3") + "/n" +
"</UL>/n" +
"</BODY></HTML>");
}
}
1.html页面不能把数据传给servlet,原因:form内的url没有包含全,url在myeclipse中比在tomcat中发布多了“/项目名”
2.一开始servlet不能显示汉字,就是不管是request的数据,还是response的数据都是乱码.解决办法:在response的getWriter()之前,serContenType("text/html;charset="GBK"")
3,上面的解决方法看起来可以了.但当servlet用doGet()处理数据时,就是设置了2中所说的,也是乱码,原因:数据在还没有送到servlet前就是乱码了(浏览器地址栏编码了),即使servlet设置好了收到的已经是乱码.所以当用doGet()处理数据时,还要把浏览器的编码设置成GBK.具体做法:conf/server.xml中的 <Connector
port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />中添加URIEncoding="GBK".(tomcat版本不同,里面的值也会不同,但是总是有这几个属性)
MyHtml.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
Front end to ThreeParams servlet.
Taken from Core Servlets and JavaServer Pages 2nd Edition
from Prentice Hall and Sun Microsystems Press,
http://www.coreservlets.com/.
(C) 2003 Marty Hall; may be freely used or adapted.
-->
<HTML><HEAD><TITLE>Collecting Three Parameters</TITLE></HEAD>
<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">参数例子</H1>
<FORM ACTION="/ThreeParameters/servlet/ThreeParameters " ><--要包含工程名字,不用包含servlet的包名-->
First Parameter: <INPUT TYPE="TEXT" NAME="param1"><BR>
Second Parameter: <INPUT TYPE="TEXT" NAME="param2"><BR>
Third Parameter: <INPUT TYPE="TEXT" NAME="param3"><BR>
<CENTER><INPUT TYPE="SUBMIT"></CENTER>
</FORM>
</BODY></HTML>
ThreeParameters.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** Simple servlet that reads three parameters from the
* form data.
* <P>
* Taken from Core Servlets and JavaServer Pages 2nd Edition
* from Prentice Hall and Sun Microsystems Press,
* http://www.coreservlets.com/.
* © 2003 Marty Hall; may be freely used or adapted.
*/
public class ThreeParameters extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=/"GBK/"");
PrintWriter out = response.getWriter();
String title = "Reading Three Request Parameters";
String docType =
"<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 " +
"Transitional//EN/">/n";
// request.setCharacterEncoding("GB2312");这句话在这里没有用。因为GET请求的参数及其值都是通过URL加密传输的。只要把浏览器的编码设置成GBK即可。当用POST请求时,这句话才起作用(防止服务器得到的参数及参数值是乱码)。究竟服务器是怎么读取客户端数据的,还是不很明白。
out.println(docType +
"<HTML>/n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>/n" +
"<BODY BGCOLOR=/"#FDF5E6/">/n" +
"<H1 ALIGN=/"CENTER/">" + title + "</H1>/n" +
"<UL>/n" +
" <LI><B>参数1</B>: "
+ request.getParameter("param1") + "/n" +
" <LI><B>param2</B>: "
+ request.getParameter("param2") + "/n" +
" <LI><B>param3</B>: "
+ request.getParameter("param3") + "/n" +
"</UL>/n" +
"</BODY></HTML>");
}
}
1.html页面不能把数据传给servlet,原因:form内的url没有包含全,url在myeclipse中比在tomcat中发布多了“/项目名”
2.一开始servlet不能显示汉字,就是不管是request的数据,还是response的数据都是乱码.解决办法:在response的getWriter()之前,serContenType("text/html;charset="GBK"")
3,上面的解决方法看起来可以了.但当servlet用doGet()处理数据时,就是设置了2中所说的,也是乱码,原因:数据在还没有送到servlet前就是乱码了(浏览器地址栏编码了),即使servlet设置好了收到的已经是乱码.所以当用doGet()处理数据时,还要把浏览器的编码设置成GBK.具体做法:conf/server.xml中的 <Connector
port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />中添加URIEncoding="GBK".(tomcat版本不同,里面的值也会不同,但是总是有这几个属性)
相关文章推荐
- JSP+Servlet学习经验1:解决form表单提交后相应页面中文乱码的问题
- Android客户端页面提交数据到tomcat的servlet插入mysql中的信息表遇到的中文乱码问题
- ajax请求数据,Json返回到页面的数据出现中文乱码问题。
- 记录问题:ajax返回对象到页面问题以及数据中文乱码问题
- 不同编码的页面表单数据乱码问题解决方法
- .jsp页面表单提交中文数据时,到达目的地后是乱码
- [转]解决Servlet获取页面数据乱码的问题
- PHP表单提交数据存入mysql的中文乱码问题
- Jsp servlet页面数据乱码问题解决(默认mysql数据库)
- php 调用webservice ,返回数据 中文乱码问题
- 腾讯微博API 返回数据中文乱码的问题的解决方案
- mac上mysql数据库读取数据中文乱码问题
- Spring MVC3返回JSON数据中文乱码问题解决
- 遇到问题-用StreamReader读取数据时出现乱码,streamwriter写入中文时出现乱码
- SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码
- 关于jspSmartUpload插件获取表单里中文数据乱码问题
- Spring MVC后台返回JSON数据中文乱码问题解决
- 解决Java Web开发中Jsp存储读取MySQL数据中文乱码的问题
- 关于J2EE程序servlet中中文乱码问题,jsp页面编码格式的选择
- JSON返回的数据中文乱码问题!!!