回麻雀苑主页          

2.2具有简单输入控制的表单处理

作者:老麻雀 2006/9/13 14:49:54

具有简单输入控制的表单处理
  上一节的HTML表单网页,表单项中输入什么数据,都能提交。这样JSP动态网页获得的数据就可能没有意义。实际应用中用户输入的数据需符合一定的规范,该怎么才能实现呢?那就要对用户输入的不规范数据进行拦截,并提示用户重新输入。本节先介绍简单的拦截方法及其原理,后面的章节中将分别介绍各种不规范数据的拦截方法。
一、 范例的演示和代码清单
  演示前需配置好开发运行环境,并将随书光盘中的范例ch2,复制到resin2.1.6\doc文件夹内,启动JSP引擎。
  演示步骤:
1. 启动IE,在地址栏键入http://127.0.0.1:8080/ch2/ch2-2.htm,如图2-3所示:
  

图 2-3

2. 试着不填写某些标有**的表单项目,进行提交;
3. 试着将“密码”和“重复密码”项目填送不一致数据(其他项目填写完整),进行提交;
4. 试着“年龄”不送入数据(其他项目填写完整),进行提交。;
5. 最后完整规范的填写所有数据,进行提交。
  不难发现,这组网页构成的表单处理,做了一些新的处理:
  1.规定了必须要填写的项目。这些标有**的项目哪怕只遗漏一项,提交后,屏幕均提示“**号选项为必填项,资料填写不完整,请重新填写!”;输入的密码和重复密码必须一致(否则提交后,屏幕均提示“密码和重复密码不一致,请重新输入密码!”。
     
         图 2-4                             图 2-5
  
  2.在允许选择是否填写内容的“年龄”项中,如果没有填写数据,屏幕显示整体注册数据时,就会不显示“年龄”一项,如图 2-6 所示;否则,如果填写了数据,屏幕显示整体注册数据时,就显示该项。,如图 2-7 所示;
     
         图 2-6                             图 2-7
  
  3.HTML表单中的“学历”项,使用的是下拉列表菜单。
  下面我们就来看一下这两个网页的代码:
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇  新用户注册  ◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch2-2.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>新用户注册</title>
5) </head>
6)
7) <body bgcolor="#FFFFCC">
8) <h2 align="center"><font color="#000099"><em>新用户注册</em></font></h2><!-- 比ch2-1增加了三个项目,同时限定了“用户名”、“密码”、“E-mail”输入时不能为空,密码的两次输入必须一致 -->
9) <form name="form1" method="post" action="ch2-2.jsp">
10) <p><font color="#CC0000">(注意,**号选项为必填项)</font></p>
11) <table width="49%" border="0">
12) <tr>
13) <td><div align="right">用户名:</div></td>
14) <td><input name="yonghuming" type="text" id="yonghuming" size="20">
15) **</td>
16) </tr>
17) <tr>
18) <td><div align="right">性 别:</div></td>
19) <td><input name="xingbie" type="radio" value="男" checked>
20) 男
21) <input type="radio" name="xingbie" value="女">
22) 女 </td>
23) </tr>
24) <tr>
25) <td><div align="right">年 龄: </div></td>
26) <td><p>
27) <input name="nianling" type="text" id="nianling" size="8">
28) </p>
29) </td>
30) </tr>
31) <tr>
32) <td><div align="right">密 码:</div></td>
33) <td><input name="mima" type="password" id="mima" size="16">
34) **</td>
35) </tr>
36) <tr>
37) <td><div align="right">重复密码:</div></td>
38) <td><input name="mima2" type="password" id="mima2" size="16">
39) **</td>
40) </tr>
41) <tr>
42) <td><div align="right">学 历:</div></td>
43) <td><select name="select" size="1">
44) <option value="初中">初中</option>
45) <option value="高中">高中</option>
46) <option value="大专">大专</option>
47) <option value="大学">大学</option>
48) <option value="硕士研究生">硕士研究生</option>
49) <option value="博士研究生">博士研究生</option>
50) </select></td>
51) </tr>
52) <tr>
53) <td><div align="right">E-mail:</div></td>
54) <td><input name="email" type="text" id="email">
55) **</td>
56) </tr>
57) <tr>
58) <td><div align="right">
59) <input type="submit" name="Submit3" value="提交">
60) </div></td>
61) <td><div align="center">
62) <input type="reset" name="Submit2" value="重新填写">
63) </div></td>
64) </tr>
65) </table>
66) <p>&nbsp; </p>
67) </form>
68) <p><em><font color="#000099"></font></em></p>
69) </body>
70) </html>

◇-◇-◇-◇-◇-◇-◇-◇-◇-◇  新用户注册  ◇-◇-◇-◇-◇-◇-◇-◇-◇-◇

范例ch2-2.jsp
1) <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
2) <html>
3) <head>
4) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
5) <title>新用户注册</title>
6) </head>
7)
8) <body bgcolor="#FFFFCC" >
9) <h2><strong><em>用户资料</em></strong></h2><!-- 比ch2-1增加了三个项目,同时限定了“用户名”、“密码”、“E-mail”输入时不能为空,密码的两次输入必须一致 -->
10) <p>
11) <%!
12) int a=0;
13) String name;
14) String xingbie;
15) String nianling;
16) String password1;
17) String password2;
18) String xueli;
19) String email;
20) %>
21) <%
22) name=request.getParameter("yonghuming");
23) xingbie=request.getParameter("xingbie");
24) nianling=request.getParameter("nianling");
25) password1=request.getParameter("mima");
26) password2=request.getParameter("mima2");
27) xueli=request.getParameter("select");
28) email=request.getParameter("email");
29) if(name.equals("")||password1.equals("")||password2.equals("")||email.equals(""))
30) { out.print("**号选项为必填项,资料填写不完整,请重新填写!");
31)  return;
32)  }
33)  else if(!password1.equals(password2))
34) {out.print("密码和重复密码不一致,请重新输入密码!");
35) return;
36) }
37) out.print("用户名:"+name);
38) out.print("<p>性别:"+xingbie);
39) if(!nianling.equals(""))
40) out.print("<p>年龄:"+nianling);
41) out.print("<p>密码:"+password1);
42) out.print("<p>学历:"+xueli);
43) out.print("<p>E-mail:"+email);
44) %>
45) </p>
46) <p> <a href="ch2-2.htm"><strong>返回表单</strong></a></p>
47) </body>
48) </html>

二、HTML表单的分析
  与上一个HTML表单网页ch2-1.htm相比,此表单网页,多了三个表单项“重复密码”、“学历”和“E-mail”,有些项目的后面标上了“**”号,从代码行上看也没有发生实质的变化。这里只介绍一下“下拉列表”制作时的注意事项,使用Dreamweaver的图形设计界面,设计制作表单的“下拉列表”表单项时,选中“下拉列表”表单项,在下面的属性面板中,可以看到如图2-8所示:
  
  图 2-8
  
  单击属性面板中的“列表值”按钮,会弹出如图2-9所示的对话框:
  
  图 2-9
  
  列表值对话框中的内容,是手工输入的,每单击一次对话框左上角的 + 号,就可以增添一个列表项,其中“项目标签”的内容,是网页运行时列表框中可以显示出的项目;“值”的内容,是表单被提交时提交送出的内容。例如,填写“学历”项目使用下拉列表选项时,选中了“大专”(可见“项目标签”中的“大专”),当提交表单时,学历一项被提交的值是“大专”(提交送出的是“值”中的“大专”)。
  再看一下ch2-2.htm中相关的代码行:
43) <td><select name="select" size="1">
44) <option value="初中">初中</option>
45) <option value="高中">高中</option>
46) <option value="大专">大专</option>
47) <option value="大学">大学</option>
48) <option value="硕士研究生">硕士研究生</option>
49) <option value="博士研究生">博士研究生</option>
50) </select></td>
  第43-50行就是下拉列表的代码,其中第43行定义了下拉列表的表单项名,及其显示的高度。
  第44-49行是每个列表项的定义,value="大专" 定义该项“值”的内容,尖括号外的“大专”是定义 “项目标签”中的内容。
  第50行中的</select> 是下拉列表截止的标记。
  那么,控制输入项不为空,两次密码输入须一致等功能,是如何实现的呢?可见这和HTML网页并无关系,控制功能都在JSP动态网页中。
三、JSP动态网页的分析
  ch2-2.jsp的代码大部分和ch2-1.jsp相同,只是增加了有控制功能的代码行。下面将针对几项功能实现的代码行进行具体分析。
  控制某些表单项不能为空的代码行:
29) if(name.equals("")||password1.equals("")||password2.equals("")||email.equals(""))
30) { out.print("**号选项为必填项,资料填写不完整,请重新填写!");
31)  return;
32) }
  第29行是一个判断语句,其含义为如果name、password1、password2、email四个变量中任何一个值为空时,就执行{ }范围内的语句。注意这里的四个变量就是对应HTML表单中标记了“**”的四项。
  equals( )是JSP常用字符串对象中的一个方法,用于字符串的比较。括弧( )中的内容是被比较的字符串。
  || 是逻辑或运算符。
  If()是标准的判断语句,括弧( )内是判断条件。注意这一行的结尾没有分号。
  第30行的大括弧“{”和第32行的大括弧“}”用于标记符合if判断条件要执行的语句范围。
  第30行的 return为返回语句,其作用是不再执行本网页此行以后的所有语句行。
  第31行是屏幕显示输出语句,用于提示用户。
  
  控制两次密码输入必须一致的代码行:
33) else if(!password1.equals(password2))
34) {out.print("密码和重复密码不一致,请重新输入密码!");
35) return;
36) }
  第33行是一个后续判断语句,其含义是如果password1、password2两个变量的值不一致,就执行下面{ }范围内的语句。
  !password1.equals(password2)语句中的“!”表示“否”的含义,password1、password2两变量进行比较仍然使用的是equals( )方法,在第一个变量前加上了感叹号“!”即为“不等于”。
  
  控制未输入数据的表单项,输出时不显示的代码行
39) if(!nianling.equals(""))
40) out.print("<p>年龄:"+nianling);
  第39行是一个判断语句,其含义是如果nianling变量的值不为空,就执行下面一行的语句。当然nianling变量在获得HTML表单提交的值是空的,第40行的语句就不执行了。屏幕上也就不会显示“年龄”这个项目的数据了。其语法和上面两组代码相同。同时还须注意这两条语句处于38行和40行之间,也就是如果输出“年龄”,就必然在“性别”和“密码”之间。
  细心者会发现,这里没有上面两组代码中的大括弧“{”和“}”。在java语法中,符合if条件,如果后面要执行的语句为一行,可省略大括弧“{”和“}”。当然上面两组代码,if语句行后面要执行的语句也是一行,同样可以省略大括弧“{”和“}”。

 

 

我也说两句
E-File帐号:用户名: 密码: [注册]
评论:(内容不能超过500字,如果您不填写用户名和密码只能以游客的身份发表评论。)

*评论内容将在30分钟以后显示!
发表须知:
一、用户须严格遵守国家法律和政策,包括但不限于《全国人大常委会关于维护互联网安全的决定》、《信息网络传播权保护条例》等规定,审慎、合法地利用伊妃(E-file)平台发表言论、作品。
二、用户的言论、行为若涉嫌违法或侵权,用户可能被强制承担因该行为直接或间接导致的全部法律责任。依照法律法规规定,伊妃(E-file)运营方有义务提供用户资料,有义务和权利采取删除、屏蔽、断开链接等各种必要措施。
三、伊妃(E-file)中心授权网络法律专业研究服务机构“网络法苑”为用户及客户提供包括免费咨询在内的全方位的法律支持。

 

版权所有:段保珠   电话:64616239   E-mail:dbz@sina.com   京ICP备06044461号
阿酷科技 Arkoo.com 提供底层技术