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