用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版本不同,里面的值也会不同,但是总是有这几个属性)