第二课:用HTML表单
大多数情况下,商业的
网站都要有一些表单,比如说输入一下消费者的姓名啦,地址啦,或者敲一个词来用搜索引擎来查一下啦,或者市场人员从来访者处收集一些
数据供参考什么的。
那些表单传回的
数据怎么处理的?
来访者通过表单向
JSP引擎输入了
数据,并保存在了request对象中,那么接下来怎么办?
图2-1向你展示了
数据流是如何在
服务器和客户之间传递的(至少在SUN的
JSP reference implementation是这么做的,别的
JSP引擎工作起来可能会有一点点的不同,其实大同小异,都差不多)
字儿太小了,可能看不大清吧?俺来解释一下了只好。
首先,
JSP引擎把存放在request对象中的
数据发到
JSP页面指定的
服务器端的组件(JavaBeans组件, servlet,或者enterprise bean),组件收到这些个
数据以后,有可能再存这些
数据到
数据库或者其他的地方存放起来,同时,返回一个response对象给
JSP引擎。
JSP引擎再把response对象传给
JSP页面,这时的页面包含了定义好的格式和从
服务器端得到的
数据。这时
JSP引擎和Web服务器再发送一个整理好的完整的页面给客户,也就是这们在浏览器上看到的结果。客户和
服务器间的通信协议可以用HTTP,当然也可以用其他的。
Request和Response对象在你制作的
JSP原代码中起作用。到于request对象到底怎么用,我要在接下来详细的讲给你听。
如何创建表单
用HTML定义一些有代表性的表单做成一个
JSP文件,然后用
JSP标签在表单和
服务器端对象(通常都用Bean)传递
数据。一般情况下是这么干的:
1、 写
JSP原文件,创建一些HTML的表单并命名。
2、 在Java文件里写Bean,定义属性,GET或者SET方法来配合已经被你指定好名字的表单。
3、 回到
JSP原文件中,增加<
jsp:useBean>标签来创建一个或者调用一个现成的Bean。
4、 增加<
jsp:setProperty>标签设置HTML表单中需要SET方法的Bean的属性。
5、 增加<
jsp:getProperty>标签设置HTML表单中需要GET方法的Bean的属性。
6、 如果需要处理更多的用户
数据,用request对象。
说了半天你可能看不懂,其实看一个例子你就懂了。
先看一个简单的hello的例子吧:
这段
程序其实还是计算机
程序里那个最经典的“hello,world”的
程序,只不过呢,我使他挠了一点弯儿,使他看起来比较智能和复杂。首先你输入你的名字,然后Duke跟你说:“hello!”
看看代码吧:
dukebanner.html
<table border="0" width="400" cellspacing="0" cellpadding="0">
<tr>
<td height="150" width="150"> </td>
<td width="250"> </td>
</tr>
<tr>
<td width="150"> </td>
<td align="right" width="250">
<img src=/images/NullPic.gif"> </td>
</tr></table><br>
主
JSP文件:hellouser.
jsp <%@ page import="hello.NameHandler" %>
<
jsp:useBean id="mybean" scope="page" class="hello.NameHandler" />
<
jsp:setProperty name="mybean" property="*" />
<html>
<head><title>Hello, User</title></head>
<body bgcolor="#ffffff" background="background.gif">
<%@ include file="dukebanner.html" %>
<table border="0" width="700">
<tr><td width="150"> </td>
<td width="550">
<h1>My name is Duke. What's yours?</h1></td></tr>
<tr><td width="150" </td><td width="550">
<form method="get">
<input type="text" name="username" size="25">
<br>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</td></tr>
</form>
</table>
<%
If ( request.getParameter("username") != null )
{
%>
<% @ include file="response.
jsp" %>
<% }
%>
</body></html>
回应文件:response.
jsp <table border="0" width="700">
<tr>
<td width="150"> </td>
<td width="550">
<h1>Hello, <
jsp:getProperty name="mybean" property="username" />!
</h1>
</td>
</tr>
</table>
处理
数据的Bean:(namehandler.java)
package hello;
public class NameHandler
{
private String username;
public NameHandler() {
username = null;
}
public void setUsername( String name ) {
username = name;
}
public String getUsername() {
return username;
}
}
建立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,你就得按照JavaBeans 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:s