|
下面介绍一个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所示。
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 occured 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所示。
screen.width-600)this.style.width=screen.width-600;">
图14-6 返回给客户端的信息 【程序注解】 在init()方法中先初始化了resultsDir变量,这个变量是以后保存文件的路径,这个变量的值在web.xml中。
doPost方法是用getParameterNames和getParameterValues方法从表单中获取数据的,当参数名是submit时,就不对这个参数操作,并将其余客户端的参数名和参数值写入文件中。因为它返回文本给客户端,doPost 调用了 getWriter 方法。在写入响应主体部分之前,它进行了响应头部字段的设置setContentType("text/html")。 |