下面介绍一个HTTP Servlet处理POST方式的例子,见示例14-3。 1 // ==================== Program Description ========================== screen.width-600)this.style.width=screen.width-600;"> 图14-5 客户端浏览效果 1 // ==================== Program Description ========================== <servlet> <BEGIN> screen.width-600)this.style.width=screen.width-600;"> 图14-6 返回给客户端的信息 doPost方法是用getParameterNames和getParameterValues方法从表单中获取数据的,当参数名是submit时,就不对这个参数操作,并将其余客户端的参数名和参数值写入文件中。因为它返回文本给客户端,doPost 调用了 getWriter 方法。在写入响应主体部分之前,它进行了响应头部字段的设置setContentType("text/html")。
【程序源代码】
2 // 程序名称:示例14-3 : SurveyExample.html
3 // 程序目的:SurveyExample源代码
4 // ==============================================================
5 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
6 <html>
7 <head>
8 <title>JavaUsageSurvey</title>
9 </head>
10
11 <body bgcolor=#ffffff>
12 <p><img src=http://www.supcode.com/Article/html/4/43/2005/02/10/images/BEA_Button_Final_web.gif align=right>
13 <blockquote>
14 <font face="helvetica">
15 <form action="SurveyServlet" method=POST>
16 <input type=hidden name=survey value=Survey01Results>
17 <BR><BR>How Many Employees in your Company?<BR>
18 <BR>1-100<input type=radio name=employee value=1-100>
19 <BR>100-200<input type=radio name=employee value=100-200>
20 <BR>200-300<input type=radio name=employee value=200-300>
21 <BR>300-400<input type=radio name=employee value=300-400>
22 <BR>500-more<input type=radio name=employee value=500-more>
23 <BR><BR>General Comments?<BR>
24 <BR><input type=text name=comment>
25 <BR><BR>What IDEs do you use?<BR>
26 <BR>JavaWorkShop<input type=checkbox name=ide value=JavaWorkShop>
27 <BR>J++<input type=checkbox name=ide value=J++>
28 <BR>Cafe‘<input type=checkbox name=ide value=Cafe‘>
29 <BR><BR><input type=submit><input type=reset>
30 </form>
31 </font>
32 </blockquote>
33 </body>
34 </html>
【程序输出结果】
在客户端IE浏览的效果如图14-5所示。
服务器端的Servlet就是要将客户端填写并发送的表单数据写入一个文件,并且用一个"thank you"信息响应用户。示例14-4就是Servlet程序。
【程序源代码】
2 // 程序名称:示例14-4 : SurveyServlet.java
3 // 程序目的:处理Http Post的表单请求
4 // ==============================================================
5 package examples.servlets;
6 import java.io.*;
7 import java.util.*;
8 import javax.servlet.*;
9 import javax.servlet.http.*;
10
11 public class SurveyServlet extends HttpServlet
12 {
13 String resultsDir;
14
15 public void init(ServletConfig config)
16 throws ServletException
17 {
18 super.init(config);
19 resultsDir = getInitParameter("resultsDir");
20 if (resultsDir == null) {
21 Enumeration initParams = getInitParameterNames();
22 System.err.println("The init parameters were: ");
23 while (initParams.hasMoreElements()) {
24 System.err.println(initParams.nextElement());
25 }
26 System.err.println("Should have seen one parameter name");
27 throw new UnavailableException (this,
28 "Not given a directory to
write survey results!");
29 }
30 }
31
32 public void doPost(HttpServletRequest req, HttpServletResponse res)
33 throws ServletException, IOException
34 {
35 res.setContentType("text/html");
36 PrintWriter toClient = res.getWriter();
37
38 try {
39 //打开文件将调查结果写入文件
40 String surveyName = req.getParameterValues("survey")[0];
41 FileWriter resultsFile = new FileWriter(resultsDir
42 + System.getProperty("file.separator")
43 + surveyName + ".txt", true);
44 PrintWriter toFile = new PrintWriter(resultsFile);
45 toFile.println("<BEGIN>");
46 Enumeration values = req.getParameterNames();
47 while(values.hasMoreElements()) {
48 String name = (String)values.nextElement();
49 String value = req.getParameterValues(name)[0];
50 if(name.compareTo("submit") != 0) {
51 toFile.println(name + ": " + value);
52 }
53 }
54 toFile.println("<END>");
55 //关闭文件
56 resultsFile.close();
57
58 // 响应客户
59 toClient.println("<html>");
60 toClient.println("<title>Thank you!</title>");
61 toClient.println("<body bgcolor=#ffffff><p><img src=images
62 /BEA_Button_Final_web.gif align=right>" +
63 "<font face="Helvetica">" +
64 "Thank you for participating</font></body>");
65 toClient.println("</html>");
66
67 }
68 catch(IOException e) {
69 e.printStackTrace();
70 toClient.println("A problem oclearcase/" target="_blank" >ccured while recording your answers. " +
71 "Please try again.");
72 }
73
74 }
75 }
部分配置文件如下所示:
<servlet-name>SurveyServlet</servlet-name>
<servlet-class>examples.servlets.SurveyServlet</servlet-class>
<init-param>
<param-name>resultsDir</param-name>
<param-value>c:eawlserver6.1configmydomainapplications
DefaultWebAppWEB-INFclasses
examplesservlets</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SurveyServlet</servlet-name>
<url-pattern>/SurveyServlet/*</url-pattern>
</servlet-mapping>
【程序输出结果】
在相同目录下生成了一个Survey01Result的文本文件,里面记录着客户提交的信息:
employee: 100-200
ide: J++
survey: Survey01Results
comment:
<END>
同时返回给客户端信息,如图14-6所示。
【程序注解】
在init()方法中先初始化了resultsDir变量,这个变量是以后保存文件的路径,这个变量的值在web.xml中。