知识大全 jsp Servlet如何处理表单数据

Posted 变量

篇首语:宁可身骨苦,不叫面皮羞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 jsp Servlet如何处理表单数据相关的知识,希望对你有一定的参考价值。

jsp Servlet如何处理表单数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 表单数据概述 如果你曾经使用过Web搜索引擎 或者浏览过在线书店 股票价格 机票信息 或许会留意到一些古怪的URL 比如“//host/path?user=Marty+Hall&origin=bwi&dest=lax” 这个URL中位于问号后面的部分 即“user=Marty+Hall&origin=bwi&dest=lax” 就是表单数据 这是将Web页面数据发送给服务器程序的最常用方法 对于GET请求 表单数据附加到URL的问号后面(如上例所示) 对于POST请求 表单数据用一个单独的行发送给服务器 以前 从这种形式的数据提取出所需要的表单变量是CGI编程中最麻烦的事情之一 首先 GET请求和POST请求的数据提取方法不同 对于GET请求 通常要通过QUERY_STRING环境变量提取数据 对于POST请求 则一般通过标准输入提取数据 第二 程序员必须负责在“&”符号处截断变量名字 变量值对 再分离出变量名字(等号左边)和变量值(等号右边) 第三 必须对变量值进行URL反编码操作 因为发送数据的时候 字母和数字以原来的形式发送 但空格被转换成加号 其他字符被转换成“%XX”形式 其中XX是十六进制表示的字符ASCII(或者ISO Latin )编码值 例如 如果HTML表单中名为“users”的域值为“~hall ~gates and ~mcnealy” 则实际向服务器发送的数据为“users=% Ehall% C+% Egates% C+and+% Emcnealy” 最后 即第四个导致解析表单数据非常困难的原因在于 变量值既可能被省略(如“param =val &param =&param =val ”) 也有可能一个变量拥有一个以上的值 即同一个变量可能出现一次以上(如“param =val &param =val &param =val ”) Java Servlet的好处之一就在于所有上述解析操作都能够自动完成 只需要简单地调用一下HttpServletRequest的getParameter方法 在调用参数中提供表单变量的名字(大小写敏感)即可 而且GET请求和POST请求的处理方法完全相同 getParameter方法的返回值是一个字符串 它是参数中指定的变量名字第一次出现所对应的值经反编码得到得字符串(可以直接使用) 如果指定的表单变量存在 但没有值 getParameter返回空字符串 如果指定的表单变量不存在 则返回null 如果表单变量可能对应多个值 可以用getParameterValues来取代getParameter getParameterValues能够返回一个字符串数组 最后 虽然在实际应用中Servlet很可能只会用到那些已知名字的表单变量 但在调试环境中 获得完整的表单变量名字列表往往是很有用的 利用getParamerterNames方法可以方便地实现这一点 getParamerterNames返回的是一个Enumeration 其中的每一项都可以转换为调用getParameter的字符串  二 实例 读取三个表单变量 下面是一个简单的例子 它读取三个表单变量param param 和param 并以HTML列表的形式列出它们的值 请注意 虽然在发送应答内容之前必须指定应答类型(包括内容类型 状态以及其他HTTP头信息) 但Servlet对何时读取请求内容却没有什么要求 另外 我们也可以很容易地把Servlet做成既能处理GET请求 也能够处理POST请求 这只需要在doPost方法中调用doGet方法 或者覆蓋service方法(service方法调用doGet doPost doHead等方法) 在实际编程中这是一种标准的方法 因为它只需要很少的额外工作 却能够增加客户端编码的灵活性 如果你习惯用传统的CGI方法 通过标准输入读取POST数据 那么在Servlet中也有类似的方法 即在HttpServletRequest上调用getReader或者getInputStream 但这种方法对普通的表单变量来说太麻烦 然而 如果是要上载文件 或者POST数据是通过专门的客户程序而不是HTML表单发送 那么就要用到这种方法 注意用第二种方法读取POST数据时 不能再用getParameter来读取这些数据  

   ThreeParams java package hall; import java io *; import javax servlet *; import javax servlet *; import java util *; public class ThreeParams extends HttpServlet public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException response setContentType("text/"); PrintWriter out = response getWriter(); String title = "读取三个请求参数"; out println(ServletUtilities headWithTitle(title) + "<BODY>\n" + "<H ALIGN=CENTER>" + title + "</H >\n" + "<UL>\n" + " <LI>param : " + request getParameter("param ") + "\n" + " <LI>param : " + request getParameter("param ") + "\n" + " <LI>param : " + request getParameter("param ") + "\n" + "</UL>\n" + "</BODY></HTML>"); public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException doGet(request response);  

   实例 输出所有的表单数据 下面这个例子寻找表单所发送的所有变量名字 并把它们放入表格中 没有值或者有多个值的变量都突出显示 首先 程序通过HttpServletRequest的getParameterNames方法得到所有的变量名字 getParameterNames返回的是一个Enumeration 接下来 程序用循环遍历这个Enumeration 通过hasMoreElements确定何时结束循环 利用nextElement得到Enumeration中的各个项 由于nextElement返回的是一个Object 程序把它转换成字符串后再用这个字符串来调用getParameterValues getParameterValues返回一个字符串数组 如果这个数组只有一个元素且等于空字符串 说明这个表单变量没有值 Servlet以斜体形式输出“No Value” 如果数组元素个数大于 说明这个表单变量有多个值 Servlet以HTML列表形式输出这些值 其他情况下Servlet直接把变量值放入表格 ShowParameters java 注意 ShowParameters java用到了前面介绍过的ServletUtilities java  

package hall; import java io *; import javax servlet *; import javax servlet *; import java util *; public class ShowParameters extends HttpServlet public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException response setContentType("text/"); PrintWriter out = response getWriter(); String title = "读取所有请求参数"; out println(ServletUtilities headWithTitle(title) + "<BODY BGCOLOR=\"#FDF E \">\n" + "<H ALIGN=CENTER>" + title + "</H >\n" + "<TABLE BORDER= ALIGN=CENTER>\n" + "<TR BGCOLOR=\"#FFAD \">\n" + "<TH>参数名字<TH>参数值"); Enumeration paramNames = request getParameterNames(); while(paramNames hasMoreElements()) String paramName = (String)paramNames nextElement(); out println("<TR><TD>" + paramName + "\n<TD>"); String[] paramValues = request getParameterValues(paramName); if (paramValues length == ) String paramValue = paramValues[ ]; if (paramValue length() == ) out print("<I>No Value</I>"); else out print(paramValue); else out println("<UL>"); for(int i= ; i<paramValues length; i++) out println("<LI>" + paramValues[i]); out println("</UL>"); out println("</TABLE>\n</BODY></HTML>"); public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException doGet(request response);   <!DOCTYPE HTML PUBLIC " //W C//DTD HTML Transitional//EN"> <HTML> <HEAD> <TITLE>示例表单</TITLE> </HEAD> <BODY BGCOLOR="#FDF E "> <H ALIGN="CENTER">用POST方法发送数据的表单</H > <FORM ACTION="/servlet/hall ShowParameters" METHOD="POST"> Item Number: <INPUT TYPE="TEXT" NAME="itemNum"><BR> Quantity: <INPUT TYPE="TEXT" NAME="quantity"><BR> Price Each: <INPUT TYPE="TEXT" NAME="price" VALUE="[GV_contentText]quot;><BR> <HR> First Name: <INPUT TYPE="TEXT" NAME="firstName"><BR> Last Name: <INPUT TYPE="TEXT" NAME="lastName"><BR> Middle Initial: <INPUT TYPE="TEXT" NAME="initial"><BR> Shipping Address: <TEXTAREA NAME="address" ROWS= COLS= ></TEXTAREA><BR> Credit Card:<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Visa">Visa<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Master Card">Master Card<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Amex">American Express<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Discover">Discover<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Java SmartCard">Java SmartCard<BR> Credit Card Number: <INPUT TYPE="PASSWORD" NAME="cardNum"><BR> Repeat Credit Card Number: <INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR> <CENTER> <INPUT TYPE="SUBMIT" VALUE="Submit Order"> </CENTER> </FORM> </BODY> </HTML>   cha138/Article/program/Java/JSP/201311/20274

相关参考

知识大全 Jsp与servlet的区别

Jsp与servlet的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  jsp经编译后就变成

知识大全 使用JSP/Servlet上载文件

使用JSP/Servlet上载文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz

知识大全 JSP和Servlet配置详解

JSP和Servlet配置详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先是下载工具  

知识大全 Servlet与JSP间的传值问题

Servlet与JSP间的传值问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Servlet

知识大全 JSP和Servlet的性能优化

JSP和Servlet的性能优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在本文中带领你学

知识大全 关于jsp和servlet中的乱码问题

  在jsp和servlet的开发中今天自己做的一个小例子中出现了中文乱码问题用了许多方法发现还是解决不了最后我用了过滤器才算终结  此方法总结如下在jsp页面中使用<%@pagepageEnc

知识大全 Servlet和JSP迈上新台阶

Servlet和JSP迈上新台阶  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  即将面世的JEE

知识大全 浅析Servlet和Jsp中的多国语言显示

浅析Servlet和Jsp中的多国语言显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  因为一

知识大全 Tomcat下JSP、Servlet和JavaBean环境配置

Tomcat下JSP、Servlet和JavaBean环境配置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 高性能、高弹性JSP和Servlet性能优化

高性能、高弹性JSP和Servlet性能优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你的