下面介绍一个HTTP Servlet处理POST方式的例子,见示例14-3。
【程序源代码】 1 // ==================== Program Description ==========================
2 // 程序名称:示例14-3 : SurveyExample.html
3 // 程序目的:SurveyExample源代码
4 // ==============================================================
5
6
7
8
UsageSurvey 9
10
11
12
13
14
15
31
32
33
34
【程序输出结果】 在客户端IE浏览的效果如图14-5所示。
图14-5 客户端浏览效果 端的Servlet就是要将客户端填写并发送的表单数据写入一个文件,并且用一个"thank you"信息响应用户。示例14-4就是Servlet程序。
【程序源代码】 1 // ==================== Program Description ==========================
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("
");
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("");
55 //关闭文件
56 resultsFile.close();
57
58 // 响应客户
59 toClient.println("");
60 toClient.println("Thank you!");
61 toClient.println(" 62 /BEA_Button_Final_web.gif align=right>" +
63 "" +
64 "Thank you for participating");
65 toClient.println("");
66
67 }
68 catch(IOException e) {
69 e.printStackTrace();
70 toClient.println("A problem occured while recording your answers. " +
71 "Please try again.");
72 }
73
74 }
75 }
部分配置文件如下所示:
SurveyServlet
examples.servlets.SurveyServlet
resultsDir
c:\bea\wlserver6.1\config\mydomain\applications
\DefaultWebApp\WEB-INF\classes
\examples\servlets
SurveyServlet
/SurveyServlet/*
【程序输出结果】
在相同目录下生成了一个Survey01Result的文本文件,里面记录着客户提交的信息:
employee: 100-200
ide: J++
survey: Survey01Results
comment:
同时返回给客户端信息,如图14-6所示。
图14-6 返回给客户端的信息
【程序注解】
在init()方法中先初始化了resultsDir变量,这个变量是以后保存文件的路径,这个变量的值在web.xml中。
doPost方法是用getParameterNames和getParameterValues方法从表单中获取数据的,当参数名是submit时,就不对这个参数操作,并将其余客户端的参数名和参数值写入文件中。因为它返回文本给客户端,doPost 调用了 getWriter 方法。在写入响应主体部分之前,它进行了响应头部字段的设置setContentType("text/html").
【责编:admin】
--------------------next---------------------