`

表单与表单中的数据提取

阅读更多

JSP处理表单提交的数据

 

 表单(Form)是实现网页上数据传输的基础,一般要和ASP、CGI等文件结合起来使用。对于ASP和CGI需要专门的程序员来完成,并在后台服务器调用。

处理表单提交的数据

在Web程序设计中,处理表单提交的数据是获取Web数据的主要方法,今天,我们来看一看Servlet中是怎样处理来自表单的数据的。

表单数据的提交方法有两种Post方法和Get方法,当使用Post方法时,数据由标准的输入设备读入,当使用Get方法时,数据由CGI变量QUERY_STRING传递给表单数据处理程序。

Servlet会自动将以上两种方法得到的数据进行处理,从而使用户只要简单的调用HttpServletRequest的getParameter方法,给出变量名称即可取得该变量的值。需要注意的是,变量的名称是大小写敏感的。对于Post方法或Get方法提交的数据,Servlet的处理方法是一样的。当请求的变量不存在时,将会返回一个空字符串。如果变量有多个值,你应该调用getParameterValues,这个方法将会返回一个字符串数组。使用getParameterNames可以取得所有变量的名称,该方法返回一个Emumeration方法。

下面让我们来看一个简单的例子,下面这个Servlet读取表单中指定名称的五个字段的值。下载这个例子

//Html file----> postdata.htm 下载本文件

<html>

<head>

<title>getFormData Servlet Example form LoveJSP.com</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body bgcolor="#FFFFFF">

<h1 align="center"> <i><b>Demo Page</b></i></h1>

<form action="/try/servlet/lovejsp.getFormData">

<p> </p>

<table width="41%" border="2" align="center">

<tr bgcolor="#6633CC" align="center">

<td colspan="2" align="center"><font color='white'>getFormData Servlet Demo

Page</font></td>

</tr>

<tr bgcolor="#FFFFCC">

<td align="center" width="43%">

<div align="right">username:</div>

</td>

<td width="57%">

<div align="left">

<input type="text" name="username">

</div>

</td>

</tr>

<tr bgcolor="#CCFF99">

<td align="center" width="43%">

<div align="right">password:</div>

</td>

<td width="57%">

<div align="left">

<input type="password" name="password">

</div>

</td>

</tr>

<tr bgcolor="#FFFFCC">

<td align="center" width="43%">

<div align="right">Email:</div>

</td>

<td width="57%">

<div align="left">

<input type="text" name="email">

</div>

</td>

</tr>

<tr bgcolor="#CCFF99">

<td align="center" width="43%">

<div align="right">Homepage:</div>

</td>

<td width="57%">

<div align="left">

<input type="text" name="Homepage">

</div>

</td>

</tr>

</table>

<p align="center">

<input type="reset" name="Reset" value="clear">

<input type="submit" name="Submit2" value="Let's Go">

</p>

</form>

</body>

</html>

//Servlet File getFormData.Java 下载本文件

package lovejsp;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

/** Servlet getParameter Ex from Lovejsp.site(http://www.lovejsp.com)

*/

public class getFormData extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title = "读取表单数据";

out.println(LovejspTools.headTitle(title) + //a tools method to show the html code with title

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H1 ALIGN=CENTER>" + title + "</H1>\n" +

"<UL>\n" +

" <LI><B>username</B>: "

+ request.getParameter("username") + "\n" +

" <LI><B>password</B>: "

+ request.getParameter("password") + "\n" +

" <LI><B>Email</B>: "

+ request.getParameter("Email") + "\n" +

" <LI><B>Homepage</B>: "

+ request.getParameter("Homepage") + "\n" +

"</UL>\n" +

"</BODY></HTML>");

}

}

这个程序的运行结果如下图所示:

大家可能注意到了,上面的结果中Email的值是null,这是因为在表单中没有这个字段,表单的email的名称是email。

下面这个程序是getParameterNames的示例,也是调试程序的很好的工具,它的功能是显示所有的表单数据。

//Servlet File ShowAllFormData.java 下载本文件

package lovejsp;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.util.*;

public class ShowAllFormData extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title = "显示所有的Form变量的值";

out.println("<HTML><HEAD><TITLE>"+title+"</TITLE></HEAD>"+

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H1 ALIGN=CENTER>" + title + "</H1>\n" +

"<TABLE BORDER=1 ALIGN=CENTER>\n" +

"<TR BGCOLOR=\"#FFAD00\">\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 == 1) {

String paramValue = paramValues[0];

if (paramValue.length() == 0)

out.print("<I>No Value</I>");

else

out.print(paramValue);

} else {

out.println("<UL>");

for(int i=0; i<paramValues.length; i++) {

out.println("<LI>" + paramValues);

}

out.println("</UL>");

}

}

out.println("</TABLE>\n</BODY></HTML>");

}

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

运行结果:

好了,that's all for today,thank you all. see you next time

 

 

 

 

 

建立HTML表单

一个HTML的窗分为三个部分:<form>标签,输入方法,提交按钮发数据到服务器。一般的HTML页面里,是这么写的<form method=get action=someurl>,在其他的页面里的action属性 可能是其他特殊的CGI程序或者其他能处理数据的程序,那么在JSP 里边是怎么用的呢,呵,如果你想把数据发到Bean里的话那么你可以省略action里边的东里了,直接写<jsp:useBean>标签或者其他特定的JSP 文件了。接下来的那些表单和普通的HTML差不多了,<input>的方法,然后加一个提交按钮,可能还有一个Reset按钮,对了,别忘了,还得给每一个input表单加一个名字。

这么写:<input type="text" name="username">

使用GET和POST方法

用GET和POST方法可以发数据到服务器,在JSP 程序中GET和POST方法可以发数据到Bean、servlet、或者其他服务器端的组件。

理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,值和表单是一一对应的。比如说,name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小。事实上POST方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到这一过程的,所以POST方法比较适合用于发送一个保密的(比如信用卡号)或者比较大量的数据到服务器。

写Bean

如果JSP 程序用到了Bean,你就得按照Java Beans API的说明设计你的Bean。

记住下面两个关键部分。

如果JSP 程序里用<jsp:getProperty>标签,那你就得在Bean里边配合的GET方法。

如果JSP 程序进而用 <jsp:setProperty>标签,那你就得在Bean里边配合的Set方法。

设置参数到Bean或者从里边取参数将在以后的部分详细介绍。

传数据到Bean

把HTML表单的数据传到Bean里需要两个工作:

· 用<jsp:useBean>标签创建或者定位到Bean

· 在Bean里面用<jsp:serProperty>设置属性

第一步用<jsp:useBean>标签创建或者定位到Bean一定要用在<jsp:setProperty>之前,<jsp:useBean>首先按照你指定的名字查找Bean,如果没找到,会给你指定一个。允许在一个JSP 文件中创建一个Bean,然后再另一个文件中调用,这就给了Bean一个很广泛的运行空间。

第二步在Bean里面用<jsp:setProperty>设置属性 值。最简单的方法是把值定义成与表单名相配合。举个例子,如果你把表单名定义成“username”那么,你就在Bean里定义属性 “username”然后用方法getUsername和setUsername。

当然也可以定义成不同的名字,只要你不认为麻烦。谁让你记忆力好呢!

Request对象

用户输入的数据用来存放在Request对象里,用javax.servlet.HttpServlet Request来执行(你也可以用其他不同的工具来执行,但他们其实都是javax.servlet.HttpServlet Request的子集)

你也可以直接用scriptlet来直接访问Request对象。Scriptlet将在下一讲里边详细的讨论,现在你只需要知道他是用脚本语言写的一段放在<% 和%> 之间的代码就足够了。在JSP 1.0中,你必须用Java TM程序语言作为你的脚本语言。

你经常会用到如下方法处理Request对象:

方法

说明

执行结果

getRequest

Java x.servlet.jsp.PageContext

返回当前Request对象

getParameterNames

javax.servlet.Servlet Request

返回当前Request对象参数名

getParameterValues

javax.servlet.Servlet Request

返回当前Request对象参数值

你将会发现其他方法包括Servlet Request,HttpServlet Request或者其他任何Servlet Request的子集。

JSP 引擎经常在scenes之后使用Request对象,即使你没有明确地在JSP 文件中调用。

从Bean中调数据到JSP 页面

一旦用户的数据被传到Bean,你就想重新得到数据,然后在JSP 面页中显示出来。想达到这一步,你就得用到<jsp:getProperty>标签。传Bean名和属性 名:

<h1>Hello, <jsp:getProperty name="mybean" property="username"/>!

<jsp:useBean>, <jsp:setProperty>, 和 <jsp:getProperty>标签必须相配,举个例子:

hellouser.jsp:

<jsp:useBean id="mybean" scope="session " class="hello.NameHandler" />

<jsp:setProperty name="mybean" property="*" />

response.jsp:

<h1>Hello, <jsp:getProperty name="mybean" property="username"/>!

在这个例子里,标签被放在两个文件中,但是指定的名字都是相同的,如果不同的话,那么系统会返回一个错误信息。

如何运行例子

我用的是UNIX主机,如果你用windows,那么改相应的路径即可。

创建路径../jswdk-1.0/examples/jsp/tutorial/hellouser.

把文件background.gif, duke.waving.gif, dukebanner.html, hellousr.jsp和response.jsp文件放进去。

创建一个目录,../jswdk-1.0/examples/WEB-INF/jsp/beans/hello

把文件NameHandler.java和NameHandler.class放进去。

cd../jswdk-1.0然后startserver

打开浏览器http://计算机名:8080/examples/jsp/tutorial/hellouser/hellouser.jsp

 

 

 

 

 表单在HTML页面中起着重要作用,它是与用户交互信息的主要手段。一个表单至少应该包括说明性文字、用户填写的表格、提交和重填按钮等内容。用户填写了所需的资料之后,按下“提交资料”按钮,这样所填资料就会通专门的CGI接口传到Web服务器上。网页的设计者随后就能在Web服务器上看到用户填写的资料,从而完成了从用户到作者之间的反馈和交流。对于免费个人网站,往往服务器不提供CGI功能,也可以电子邮件来接收用户的反馈信息。

  表单中主要包括下列元素:

button——普通按钮

radio ——单选按钮

checkbox——复选框

select ——下拉式菜单

text ——单行文本框

textarea——多行文本框

submit——提交按钮

reset—— 重填按钮

  用HTML设计表单常用的标记是:<form>、< input>、<Option>、<Select>、<textarea>和<isindex>等标记。

1、<form>表单标记

  该标记的主要作用是设定表单的起止位置,并指定处理表单数据程序的url地址。其基本语法结构如下:

<form

action=url

method=get|post

name=value

onreset=function

onsubmit=function

target=window>

</form>

  其中action:用于设定处理表单数据程序url的地址。这样的程序通常是CGI应用程序,采用电子邮件方式时,用action="mailto:你的邮件地址"。

method:指定数据传送到服务器的方式。有两种主要的方式,当method=get时,将输入数据加在action指定的地址后面传送到服务器;当method=post时则将输入数据按照HTTP传输协议中的post传输方式传送到服务器,用电子邮件接收用户信息采用这种方式。

name:用于设定表单的名称。onrest和onsubmit是主要针对“reset”按钮和“submit”按钮来说的,分别设定了在按下相应的按钮之后要执行的子程序。

target:指定输入数据结果显示在那个窗口,这需要与<frame>标记配合使用。

2、<input>表单输入标记

  此标记在表单中使用频繁,大部分表单内容需要用到此标记。其语法如下:

<inPut

aligh=left|righ|top|middle|bottom

name=value

type=text|textarea|password|checkbox|radio|submit|reset|file|hidden|image|button

value=value

src=url

checked

maxlength=n

size=n

onclick=function

onselect=function>

align:是用于设定表单的位置是靠左(left)、靠右(right)、居中(middle)、靠上 top)还是靠底(bottom)。

name:设定当前变量名称。

type:决定了输入数据的类型。其选项较多,各项的意义是:

type=text:表示输入单行文本;

typet=textarea:表示输入多行文本;

type=password:表示输入数据为密码,用星号表示;

type-checkbox:表示复选框;

type-radio:表示单选框;

type一submit:表示提交按钮,数据将被送到服务器;

tyPe-reset:表示清除表单数据,以便重新输入;

type-file:表示插入一个文件;

type-hidden:表示隐藏按钮;

type=image:表示插入一个图像;

type一button:表示普通按钮;

value:用于设定输入默认值,即如果用户不输入的话,就采用此默认值;

src:是针对type=image的情况来说的,设定图像文件的地址;

checked:表示选择框中,此项被默认选中;

maxlength:表示在输入单行文本的时候,最大输入字符个数;

size:用于设定在输入多行文本时的最大输入字符数,采用width,height方式;

onclick:表示在按下输入时调用指定的子程序;

onselect:表示当前项被选择时调用指定的子程序。

3、<select>下拉菜单标记

  用<select>标记可以在表间中插入一个下拉菜单,它需与<option>标记联用,因为下拉菜单中的每个选项要用<option>标记来定义。<select>标记的语法如下:

<select

name=nametext

size=n

multiple>

  其中name:设定下拉式菜单的名称;

size:设定菜单框的高度,也就是一次显示几个菜单项,一般取默认值(size="1");

multiple:设定为可以进行多选。

4、<option>选项标记

  该标记为下拉菜单中一个选项,语法很简单:

<option

selected

value=value>

其中selected:表示当前项被默认选中;

value:表示该项对应的值,在该项被中之后,该项的值就会被送到服务器进行处理。

5、<textarea>多行文本输入标记

  这是一个建立多行文本输入框的专用标记,其语法如下:

<textarea

name=name

cols=n

rows=n

wrap=off|hard|soft>

  各参数含义:name:文本框名称;clos:宽度;rows:高度(行数);wrap:换行控制,off:不自动换行;hard:自动硬回车换行,换行标记一同被传送到服务器中去;soft:自动软回车换行,换行标记不会传送到服务器中去。

  表单所涉及的标记较多,参数也较复杂,而实际制作表单时就是这些标记的组合应用,但一般的表单不可能涉及所有参数,我们还是那个原则,能用默认值的尽量用默认值,绝不设定一个不用的参数。我在后面的文章中将通过实例介绍一些常用参数的应用技巧。

 

 

 

第八章 表单与控件

一 什么是表单

    表单是用户与服务器管理员或作者进行信息交流的感应器,主要负责客户数据的采集功能, 用户可以通过表单将自己的姓名,email,留言等数据,传到服务器的接口cgi上,再由cgi传到服务器,如果服务器不支持cgi,也可以用电子邮件传递给作者;

二 表单的基本组成

    表单是由窗体和控件组成的,一个表单一般的应该包含:指导用户填写的说明性文字,用户填写的表格,提交和复位按钮等;这些表格,按钮等叫做控件,所以说表单是一个容器,因为它能够容纳各种各样的控件;

   要构造一个表单必需使用表单标记form,其格式为

窗体顶端

...

窗体底端

,然后就是在开始标记

窗体顶端

和结束标记

窗体底端

之间,使用写入标记input把各种控件标记放进去;

三 表单标记-form                    

格式:

窗体顶端

...

窗体底端

属性:

1 action="url"

     action指定接收这个表单数据的文件的地址,这个地址一般是服务器的URL或者电子邮 件地址email,如果这个属性是空值则当前文档的url将被使用;一般来说,处理用户反馈信息的程序是放在Web服务器的cgi-bin目录下。

2 method=get/post

    method:指定与服务器交换数据的方法,可选get和post;当method=get时表示交换少量信息,主要用于从服务器获取信息,在向服务器传送信息时,信息长度不能超过255个字符,即小于1k的资料,当method=post时则表示要传递大量信息,数据将按照Http传输协议中的post传输方式传送到服务器,电子邮件接收一般采用这种方式。

3 name="myform" 用于设定表单的名称

4 target="blank"

    target:指定目标窗口,可选当前窗口self,父级窗口parent,顶层窗口top,空白窗口

blank;

5 onsubmit 指定需要执行的函数

四 写入标记-input

     写入标记input用来在表单标记form中写入控件,该标记是单标记,没有结束标记,它的属性为:

  1 name 定义控件名称

  2 type 定义控件类型,即指明使用什么控件,如type="button"指明使用普通按钮控件;

  3 align 对齐方式,可取top, bottom, middl;

  4 maxlength 在单行文本的时候允许输入的最大字符数;

  5 size 控件的宽度

  6 src 插入图像的url

  7 event 指定激发的事件

  8 value 用于设定输入默认值,即如果用户不输入的话,就采用此默认值;

五 内部控件

1 button 普通按钮,当这个按钮被点击时,就会调用属性onclick指定的函数;在使用这个按钮时,一般配合使用value指定在它上面显示的文字,用onclick指定一个函数,一般为java的一个事件;例如:

示例1-mybutton:

窗体顶端

窗体底端

示例解读:

首先使用一对表单标记form定义一个窗体,然后通过写入标记input在窗体form中定义要写入的控件类型type,例如:type="button"

2 submit 提交按钮,当这个按钮被点击时,就会连接到表单form属性action指定的url地址;

然后浏览器就会将表单的输入信息传送给服务器。

3 reset重置按钮,单击该按钮便清除表单中的数据,可以从新输入;

示例2-submit

窗体顶端

窗体底端

4 checkbox 和 radio 前者用于多选,后者用于单选;他们有一下属性:

  (1) name 定义控件名称

  (2) value 定义控件的值

  (3) checked 设定控件初始状态是被选中的

  (4) onclick 定义控件被选中时要执行的函数

  (5) onfocus 定义控件为焦点时要执行的函数

复选项checkbox表示:用户可以同时选中表单的一个或几个选项作为输入信息,单选项radio表示:用户只能选择表单中所有选项的一个做为输入信息,所以当为单选项时,所有按钮的name属性必需相同,如:都设置为my_radio;

示例3-radio

窗体顶端

窗体底端

5 text 单行文本控件,有下列属性:

  (1)name 定义控件名称

  (2)value 指定控件初始值,该值就是浏览器被打开时在文本框中的内容

  (3)size 指定控件宽度,表示该文本输入框所能显示的最大字符数。

  (4)maxlenth 表示该文本输入框允许用户输入的最大字符数。

  (5)onchang 当文本改变时要执行的函数

  (6)onselect 当控件被选中时要执行的函数

  (7)onfocus 当文本接受焦点时要执行的函数

6 password 口令控件,表示该输入项的输入信息是密码,在文本输入框中显示"*",属性有:

  (1)name 定义控件名称

  (2)value 指定控件初始值,该值就是浏览器被打开时在文本框中的内容

  (3)size 指定控件宽度,表示该文本输入框所能显示的最大字符数。

  (4)maxlenth 表示该文本输入框允许用户输入的最大字符数。

7 select 选择性列表控件,它有如下属性:

  (1)name控件名称,

  (2)size控件宽度,

  (3)multiple指定为多项选择,  

  (4)onchange指定控件改变时要调用的函数

  (5)onfocus当控件接受焦点时要执行的函数

  (6)onblur当控件失去焦点时要执行的函数

8 textarea:多行文本控件,可以多行输入;

  (1)onchange指定控件改变时要调用的函数

  (2)onfocus当控件接受焦点时要执行的函数

  (3)onblur当控件失去焦点时要执行的函数

  (4)onselect当控件内容被选中时要执行的函数

9 hidden 隐藏控件,用于传递数据,对用户来说是不可见的;属性有:

   name 控件名称,

   value 控件默认值

hidden隐藏控件的默认值会随表单一起发送给服务器,例如:

 

控件的名称设置为ss,设置其数据为"688",当表单发送给服务器后,服务器就可以根据

hidden的名称ss,读取value的值688;

示例4

窗体顶端

请选择你喜欢的课程

flash脚本课

flash基础课

flash实例课

flash提高课

请选择你最喜欢的课程

flash脚本课

flash基础课

flash实例课

flash提高课

输入帐号

<INPUT&NBSP;&NBSP;NAME=USER size="20">

输入密码

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics