servlet数据传到表单,jsp输入数据

2020-11-12 阅读 曹新雪整理

内容简介:jsp添加数据到数据库1: 表单数据概述如果您曾经使用过web搜索引擎,或浏览过在线书店、股票价格、机票,您可能会注意到一些奇怪的URL,例如http://host/path?用户=jsp表单提交到servle...

一:表单数据概述如果你曾经使用过Web搜索引擎,或者浏览过在线书店、股票价格、机票信息,或许会留意到一些古怪的URL,比如http://host/path?user=MartyHallorigin=bwidest=lax。

这个URL中位于问号后面的部分,即user=MartyHallorigin=bwidest=lax,就是表单数据,这是将Web页面数据发送给服务器程序的最常用方法。

对于GET请求,表单数据附加到URL的问号后面(如上例所示);对于POST请求,表单数据用一个单独的行发送给服务器。

以前,从这种形式的数据提取出所需要的表单变量是CGI编程中最麻烦的事情之一。

首先,GET请求和POST请求的数据提取方法不同:对于GET请求,通常要通过QUERY_STRING环境变量提取数据;对于POST请求,则一般通过标准输入提取数据。

第二,程序员必须负责在符号处截断变量名字-变量值对,再分离出变量名字(等号左边)和变量值(等号右边)。

第三,必须对变量值进行URL反编码操作。

因为发送数据的时候,字母和数字以原来的形式发送,但空格被转换成加号,其他字符被转换成%XX形式,其中XX是十六进制表示的字符ASCII(或者ISOLatin-1)编码值。

例如,如果HTML表单中名为users的域值为~hall,~gates,and~mcnealy,则实际向服务器发送的数据为users=~hall,~gates,and~mcnealy。

最后,即第四个导致解析表单数据非常困难的原因在于,变量值既可能被省略(如param1=val1&param2=&param3=val3),也有可能一个变量拥有一个以上的值,即同一个变量可能出现一次以上(如param1=val1&param2=val2&param1=val3)。

JavaServlet的好处之一就在于所有上述解析操作都能够自动完成。

只需要简单地调用一下HttpServletRequest的getParameter方法、在调用参数中提供表单变量的名字(大小写敏感)即可,而且GET请求和POST请求的处理方法完全相同。

getParameter方法的返回值是一个字符串,它是参数中指定的变量名字第一次出现所对应的值经反编码得到得字符串(可以直接使用)。

如果指定的表单变量存在,但没有值,getParameter返回空字符串;如果指定的表单变量不存在,则返回null。

如果表单变量可能对应多个值,可以用getParameterValues来取代getParameter。

getParameterValues能够返回一个字符串数组。

最后,虽然在实际应用中Servlet很可能只会用到那些已知名字的表单变量,但在调试环境中,获得完整的表单变量名字列表往往是很有用的,利用getParamerterNames方法可以方便地实现这一点。

getParamerterNames返回的是一个Enumeration,其中的每一项都可以转换为调用getParameter的字符串。

二:实例:读取三个表单变量下面是一个简单的例子,它读取三个表单变量param1、param2和param3,并以HTML列表的形式列出它们的值。

请注意,虽然在发送应答内容之前必须指定应答类型(包括内容类型、状态以及其他HTTP头信息),但Servlet对何时读取请求内容却没有什么要求。

另外,我们也可以很容易地把Servlet做成既能处理GET请求,也能够处理POST请求,这只需要在doPost方法中调用doGet方法,或者覆盖service方法(service方法调用doGet、doPost、doHead等方法)。

在实际编程中这是一种标准的方法,因为它只需要很少的额外工作,却能够增加客户端编码的灵活性。

如果你习惯用传统的CGI方法,通过标准输入读取POST数据,那么在Servlet中也有类似的方法,即在HttpServletRequest上调用getReader或者getInputStream,但这种方法对普通的表单变量来说太麻烦。

然而,如果是要上载文件,或者POST数据是通过专门的客户程序而不是HTML表单发送,那么就要用到这种方法。

注意用第二种方法读取POST数据时,不能再用getParameter来读取这些数据。

ThreeParams.javapackagehall;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;importjava.util.*;publicclassThreeParamsextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(text/html);PrintWriterout=response.getWriter();Stringtitle=读取三个请求参数;out.println(ServletUtilities.headWithTitle(title)<BODY>\n<H1ALIGN=CENTER>title</H1>\n<UL>\n<LI>param1:request.getParameter(param1)\n<LI>param2:request.getParameter(param2)\n<LI>param3:request.getParameter(param3)\n</UL>\n</BODY></HTML>);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}4.3实例:输出所有的表单数据下面这个例子寻找表单所发送的所有变量名字,并把它们放入表格中,没有值或者有多个值的变量都突出显示。

首先,程序通过HttpServletRequest的getParameterNames方法得到所有的变量名字,getParameterNames返回的是一个Enumeration。

接下来,程序用循环遍历这个Enumeration,通过hasMoreElements确定何时结束循环,利用nextElement得到Enumeration中的各个项。

由于nextElement返回的是一个Object,程序把它转换成字符串后再用这个字符串来调用getParameterValues。

getParameterValues返回一个字符串数组,如果这个数组只有一个元素且等于空字符串,说明这个表单变量没有值,Servlet以斜体形式输出NoValue;如果数组元素个数大于1,说明这个表单变量有多个值,Servlet以HTML列表形式输出这些值;其他情况下Servlet直接把变量值放入表格。

ShowParameters.java注意,ShowParameters.java用到了前面介绍过的ServletUtilities.java。

packagehall;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;importjava.util.*;publicclassShowParametersextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(text/html);PrintWriterout=response.getWriter();Stringtitle=读取所有请求参数;out.println(ServletUtilities.headWithTitle(title)<BODYBGCOLOR=\#FDF5E6\>\n<H1ALIGN=CENTER>title</H1>\n<TABLEBORDER=1ALIGN=CENTER>\n<TRBGCOLOR=\#FFAD00\>\n<TH>参数名字<TH>参数值);EnumerationparamNames=request.getParameterNames();while(paramNames.hasMoreElements()){StringparamName=(String)paramNames.nextElement();out.println(<TR><TD>paramName\n<TD>);String[]paramValues=request.getParameterValues(paramName);if(paramValues.length==1){StringparamValue=paramValues[0];if(paramValue.length()==0)out.print(<I>NoValue</I>);elseout.print(paramValue);}else{out.println(<UL>);for(inti=0;i<paramValues.length;i){out.println(<LI>paramValues[i]);}out.println(</UL>);}}out.println(</TABLE>\n</BODY></HTML>);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}测试表单下面是向上述Servlet发送数据的表单PostForm.html。

就像所有包含密码输入域的表单一样,该表单用POST方法发送数据。

我们可以看到,在Servlet中同时实现doGet和doPost这两种方法为表单制作带来了方便。

<!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0Transitional//EN><HTML><HEAD><TITLE>示例表单</TITLE></HEAD><BODYBGCOLOR=#FDF5E6><H1ALIGN=CENTER>用POST方法发送数据的表单</H1><FORMACTION=/servlet/hall.ShowParametersMETHOD=POST>ItemNumber:<INPUTTYPE=TEXTNAME=itemNum><BR>Quantity:<INPUTTYPE=TEXTNAME=quantity><BR>PriceEach:<INPUTTYPE=TEXTNAME=priceVALUE=[GV_contentText]quot;><BR><HR>FirstName:<INPUTTYPE=TEXTNAME=firstName><BR>LastName:<INPUTTYPE=TEXTNAME=lastName><BR>MiddleInitial:<INPUTTYPE=TEXTNAME=initial><BR>ShippingAddress:<TEXTAREANAME=addressROWS=3COLS=40></TEXTAREA><BR>CreditCard:<BR><INPUTTYPE=RADIONAME=cardTypeVALUE=Visa>Visa<BR><INPUTTYPE=RADIONAME=cardTypeVALUE=MasterCard>MasterCard<BR><INPUTTYPE=RADIONAME=cardTypeVALUE=Amex>AmericanExpress<BR><INPUTTYPE=RADIONAME=cardTypeVALUE=Discover>Discover<BR><INPUTTYPE=RADIONAME=cardTypeVALUE=JavaSmartCard>JavaSmartCard<BR>CreditCardNumber:<INPUTTYPE=PASSWORDNAME=cardNum><BR>RepeatCreditCardNumber:<INPUTTYPE=PASSWORDNAME=cardNum><BR><BR><CENTER><INPUTTYPE=SUBMITVALUE=SubmitOrder></CENTER></FORM></BODY></HTML>

作者给您推荐的内容
  1. 华为手机怎么设置屏幕自动熄屏时间?下面小编来教大家。01、首先,我们打开我们的手机,然后我们点击手机桌面上的设置;02、弹出的界面,我们点击显示;03、弹出的界面,我们点击...

  2. AE文字特效教程应用目的:制作文字效果应用软件:dreamweavermx操作难度:★★★★★★我们常用的网页制作工具dreamweavermx不仅可以制作网页,还可以使用其中文字特效软件...

  3. 迷你世界如何进行联机呢?今天小编为大家讲解一下。01、打开手机,找到迷你世界,点击并进入,如图所示。02、进入之后,登录自己的账号,点击进入游戏,如图所示。03、进入之...

  4. 今天,小编给如何参与支付宝中的回收旧衣服活动大家介绍一下支付宝回收旧衣服的方法,希望能对你有所帮助。具体内容如下:1。首先,请在手机中找到支付宝图标,点击登录。2其次,接下来,...

  5. 截图有多种方式,选择自己喜欢的一种即可。保存也可以通过QQ发送另存为单独的图片文件。01、直接按电脑键盘上的“PrtSc”键,截取整个电脑屏幕;截取后,按Ctrl V后,即可粘贴至邮件、文档内...

  6. 当怒火在燃烧当梦想在跳本课程主要利用photoshop合成燃烧的人像海报。它主要利用光照边缘滤光片使人的脸燃烧。它还结合了火焰和烟雾的材料来合成海报风格的作品。喜欢朋友一起学...

  7. 支付宝怎么查看通过挖哦下的订单呢?今天小编为大家讲解一下。01、打开手机,找到支付宝,点击并进入,如图所示。02、进入之后,找到“花呗”,点击并进入,如图所示。03、进入之后,选...

  8. 磁盘碎片是造成计算机速度缓慢和不稳定的主要原因。据信,许多用户将使用SmartDefrag清理磁盘碎片。然而,很多用户发现这个界面是英文的,他们根本无法理解。计算机苹果电脑怎么切...

  9. 到底是买苹果还是买安卓手机?下面就这个话题跟大家一起来说一下吧。01、首先我想说的是苹果手机比较贵,大家都知道这一点,目前价格都平均四千块左右,所以大家在购买的时候要看自己的经...

  10. 平时我们会遇到很多恶意的VBS脚本,这些脚本会一直循环执行,很多人不知道怎么关闭这样的脚本。下面小编就给大家分享一下如何关闭VBS的循环脚本。01、首先我们双击打开一个后缀名为VBS的脚本...