Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458596
  • 博文数量: 711
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 4200
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 14:18
文章分类

全部博文(711)

文章存档

2011年(1)

2008年(710)

我的朋友

分类:

2008-10-28 14:22:16


  下面介绍一个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   

  16    
  17    

How Many Employees in your Company?

  18     
1-100
  19     
100-200
  20     
200-300
  21     
300-400
  22     
500-more
  23    

General Comments?

  24     

  25    

What IDEs do you use?

  26     
WorkShop
  27     
J++
  28     
Cafe'
  29    


  30   

  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---------------------

阅读(601) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~