Servlet处理POST请求

发表于:2007-06-22来源:作者:点击数: 标签:
下面介绍一个HTTP Servlet处理POST方式的例子,见示例14-3。 【程序源代码】 1// ==================== Program Decription ========================== 2// 程序名称:示例14-3 : SurveyExample.html 3// 程序目的:SurveyExample源代码 4// ==============

   

下面介绍一个HTTP Servlet处理POST方式的例子,见示例14-3。
    【程序源代码】

1 // ==================== Program Description ==========================
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处理POST请求(图一)screen.width-600)this.style.width=screen.width-600;">

图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("<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>
<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的文本文件,里面记录着客户提交的信息:

<BEGIN>
employee: 100-200
ide: J++
survey: Survey01Results
comment:
<END>
 


    同时返回给客户端信息,如图14-6所示。

Servlet处理POST请求(图二)screen.width-600)this.style.width=screen.width-600;">

图14-6 返回给客户端的信息


    【程序注解】
    在init()方法中先初始化了resultsDir变量,这个变量是以后保存文件的路径,这个变量的值在web.xml中。

    doPost方法是用getParameterNames和getParameterValues方法从表单中获取数据的,当参数名是submit时,就不对这个参数操作,并将其余客户端的参数名和参数值写入文件中。因为它返回文本给客户端,doPost 调用了 getWriter 方法。在写入响应主体部分之前,它进行了响应头部字段的设置setContentType("text/html")。

原文转自:http://www.ltesting.net