使用JSP处理HTML表单
href="使用JSP处理HTML表单.files/filelist.xml" rel="File-List" />
使用JSP处理HTML表单
1.HTML表单
HTML表单的一般形式:
<form name="
…" action="X.jsp" method="post">
表单控件
</form>
(1)
X.jsp的一般形式:
<html>
<head><title>表单处理</title></head>
<body>
<h2>These are submitted by the form:</h2>
<%
//
得到所有的参数名称
java.util.Enumeration e=request.getParameterNames();
//
对所有参数进行循环
while(e.hasMoreElements())
{
//
得到参数名
String name=(String)e.nextElement();
//
得到这个参数的所有值
String[] value=request.getParameterValues(name);
//
输出参数名
out.print("<p>");
out.print("<h3>"+name+":");
//
对一个参数所有的值进行循环
for(int i=0;i<value.length;i++)
{
//
输出一个参数值
out.print(value[i]);
if(i!=value.length-1)
out.print(",");
}
out.print("</h3></p>");
}
%>
</body>
</html>
(2)表单控件
关于表单控件的详细介绍参见 Marty Hall, Larry Brown编写的《Core
Servlets and JavaServer Pages:Volume 1:Core Technologies 2nd Edition 》第19章。
2.对表单的验证
提交表单后,需要对信息进行验证。表单的验证有两种:客户端验证和服务器验证。
(1)表单的客户端验证
表单的客户端验证主要是通过JavaScript来完成的。
<html>
<head>
<title>客户端验证</title>
<Script>
function Check()
{
username=document.form1.username.value;
age=document.form1.age.value;
year=document.form1.year.value;
email=document.form1.email.value;
<!--
验证提交数据的长度-->
if(username.length<2||username.length>8)
{
alert("
用户名长度必须在2
位到8
位之间");
return false;
}
<!--
验证提交数据的范围-->
if(age.length!=2||isNaN(age)||parseInt(age)<20||parseInt(age)>50)
{
alert("
你的年龄不符合我们的要求!");
return false;
}
<!--
验证提交数据的类型-->
<!--
限定出生年份是一个4
位整数-->
if(year.length!=4||isNaN(year))
{
alert("
年份填写不正确!");
return false;
}
<!--
限定电子邮箱不能为空,且必须要有“@
”和“.
”-->
if(email.length==""||(email.indexOf('@')==-1)||(email.indexOf('.')==-1))
{
alert("
电子邮件填写不正确!");
return false;
}
return true;
}
</Script>
</head>
<body>
<h3>客户端验证</h3>
<form name="form1" action="
X.jsp" OnSubmit="return Check();">
<p>用 户 名:<input name="username"></p>
<p>年&
nbsp; 龄:<input name="age"></p>
<p>出生年份:<input name="year"></p>
<p>电子邮件:<input name="email"></p>
<p><input type=Submit value="提交"></p>
</form>
</body>
</html>
(2)表单的服务器端验证
表单的服务器端验证是通过服务器端的
X.jsp来完成的。
<html>
<head>
<title>A Form</title>
</head>
<body>
<h3>The form will be checked by the Server.</h3>
<form name="fm" action="
XXX.jsp" method="post">
<p>
UserName:
<input type="text" name="username">
</p>
<p>
PassWord:
<input type="password" name="password">
</p>
<p>
BirthYear:
<input type="text" name="birthyear">
</p>
<p><center>
<a href='JavaScript:fm.submit();'>提交</a>
<a href='JavaScript:fm.reset();'>重置</a>
</center></p>
</form>
</body>
</html>
服务器端验证:
XXX.jsp
<html>
<head>
<title>show form</title>
</head>
<%@ page
contentType="text/html;charset=GB2312" %>
<body>
<font color=blue size="4">以下是你提交的内容:</font>
<%
//得到提交的表单数据
String username=request.getParameter("username");
String password=request.getParameter("password");
String birthyear=request.getParameter("birthyear");
boolean flag=true;
//输出提交信息
out.println("<p>UserName:"+username+"<br>");
out.println("PassWord:"+password+"<br>");
out.println("BirthYear:"+birthyear+"<br></p>");
//验证提交的username是否是合法的字符串
String errorchar=";,<>?|[]{}+=_-*&^%$#@!~`";
String number="0123456789";
for(int i=0;i<username.length();i++)
{
if(!(errorchar.indexOf(username.charAt(i))==-1))
flag=false;
if(!(number.indexOf(username.charAt(0))==-1))
flag=false;
}
//验证提交的username的长度是否符合要求
if(username.length()<3||username.length()>8)
flag=false;
//验证提交的password的长度是否符合要求
if(password.length()<6||password.length()>14)
flag=false;
//验证提交的
birthyear是否是4位整数
try{
Integer.parseInt(birthyear);
}catch(Exception e)
{
flag=false;
}
if(birthyear.length()!=4) flag=false;
//验证提交的
birthyear的数字范围是否符合要求
int by=Integer.parseInt(birthyear);
if(by<1949||by>2008)
flag=false;
//返回验证信息
out.println("<font color=blue size=4>");
if(flag) out.println("你所提交的数据符合我们的要求。");
else out.println("你所提交的数据不符合我们的要求。");
out.println("</font>");
%>
</body>
</html>
3.页面间链接和数据传递的三种方式
页面间链接和数据传递的三种方式:
(1)通过form将数据提交到下一个页面;
(2)通过链接将数据提交到下一个页面
(3)通过Session将数据提交到后续页面
例:
01.html
<html>
<head>
<title>利用表单传递数据</title>
</head>
<body>
<h3>利用表单传递数据</h3>
<form name="form1" method="post" action="02.jsp">
<p>你的姓名:
<input type="text" name="name">
</p>
<p>你的爱好:
<input type="text" name="hobby">
</p>
<p>你所从事的行业:
<select name="work">
<option value="学生">学生</option>
<option value="IT业" selected>IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
</select>
</p>
<p>
<input type="Submit" value="提交">
<input type="Reset" value="重置">
</p>
</form>
</body>
</html>
02.jsp
<html>
<head>
<title>从表单中获取数据</title>
</head>
<%@ page
contentType="text/html;charset=GB2312"%>
<body>
<h3>从表单中获取数据</h3>
<p>
<%
//从表单中获取数据
String name=new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK");
String hobby=new String(request.getParameter("hobby").getBytes("ISO8859_1"),"GBK");
String work=new String(request.getParameter("work").getBytes("ISO8859_1"),"GBK");
//验证"名字(name)"的长度是否符合要求
if(name.length()<3||name.length()>8)
out.println("你输入的名字长度不符合要求");
else
{
out.println("你的姓名是:"+name+"<
br>");
out.println("你的爱好是:"+hobby+"<
br>");
out.println("你所从事的工作是:"+work+"<
br>");
//将"名字(name)"保存到session对象中,让后续页面(下个页面、下下个页面、……)引用
session.setAttribute("name",name);
}
%>
<
br>
<!--将"爱好(hobby)"和"工作(work)"以链接的形式传递给下个页面-->
<a
href="03.jsp?hobby=<%=hobby%>&work=<%=work%>">提交</a>
</p>
<hr>
<p><font size="2">*将"名字(name)"保存到session对象中,让后续页面(下个页面、下下个页面、……)引用</font></p>
<p><font size="2">*将"爱好(hobby)"和"工作(work)"以链接的形式传递给下个页面</font></p>
</body>
</html>
03.jsp
<html>
<head>
<title>从session对象中获取"名字(name)"的值;从链接中获取"爱好(hobby)"和"工作(work)"</title>
</head>
<%@ page
contentType="text/html;charset=GB2312"%>
<SCRIPT language="JavaScript">
function submit1()
{
document.forms["form1"].action="04.jsp";
document.form1.submit();
}
function edit1()
{
document.forms["form1"].action="01.jsp";
document.form1.submit();
}
</SCRIPT>
<%@ page
contentType="text/html;charset=GB2312" %>
<body>
<h3>从session对象中获取"名字(name)"的值;从链接中获取"爱好(hobby)"和"工作(work)"</h3>
<%
String name=(String)session.getAttribute("name");
String hobby=new String(request.getParameter("hobby").getBytes("ISO8859_1"),"GBK");
String work=new String(request.getParameter("work").getBytes("ISO8859_1"),"GBK");
out.println("你的姓名是:"+name+"<
br>");
out.println("你的爱好是:"+hobby+"<
br>");
out.println("你所从事的工作是:"+work+"<
br>");
//将"爱好(hobby)"和"工作(work)"保存在session对象中
session.setAttribute("hobby",hobby);
session.setAttribute("work",work);
%>
<form name="form1" method="post">
<input type="hidden" name="name" value="<%=name%>">
<input type="hidden" name="hobby" value="<%=hobby%>">
<input type="hidden" name="work" value="<%=work%>">
<p><h3>确认提交这些信息吗?</h3></p>
<input type="Button" name="Submit" value="确认"
onClick="javascript:submit1()">
<input type="Button" name="Edit" value="修改"
onClick="javascript:edit1()">
</form>
<hr>
<p><font size="2">*将"爱好(hobby)"和"工作(work)"保存在session对象中,让后续页面(下个页面、下下个页面、……)引用</font></p>
<p><font size="2">*由于"名字(name)"在上个页面中已经保存在session对象中了,这里没必要再次保存</font></p>
</body>
</html>
04.jsp
<html>
<head>
<title>从
sessoin对象中获取数据</title>
</head>
<%@ page
contentType="text/html;charset=GB2312" %>
<body>
<h3>从
sessoin对象中获取数据</h3>
<%
//从
sessoin对象中获取数据
String name=(String)session.getAttribute("name");
String work=(String)session.getAttribute("work");
String hobby=(String)session.getAttribute("hobby");
%>
<p>
<font color="#0000FF"><%=name%></font>,你好!你所从事的工作是<font color="#0000FF"><%=work%></font>,在业余时间喜欢<font color="#0000FF"><%=hobby%></font>。
</p>
</body>
</html>
01.jsp
<html>
<head>
<title>利用表单传递数据</title>
</head>
<%@ page
contentType="text/html;charset=GB2312" %>
<%
String name=new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK");
String hobby=new String(request.getParameter("hobby").getBytes("ISO8859_1"),"GBK");
String work=new String(request.getParameter("work").getBytes("ISO8859_1"),"GBK");
%>
<body>
<h3>利用表单传递数据</h3>
<form name="form1" method="post" action="02.jsp">
<p>你的姓名:
<input type="text" name="name" value="<%=name%>">
</p>
<p>你的爱好:
<input type="text" name="hobby" value="<%=hobby%>">
</p>
<p>你所从事的行业:
<select name="work">
<%if(work.equals("学生")){%>
<option value="学生" selected>学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("IT业")){%>
<option value="学生">学生</option>
<option value="IT业" selected>IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("商业")){%>
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业" selected>商业</option>
<option value="制造业">制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("制造业")){%>
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业" selected>制造业</option>
<option value="服务业">服务业</option>
<%}else if(work.equals("服务业")){%>
<option value="学生">学生</option>
<option value="IT业">IT业</option>
<option value="商业">商业</option>
<option value="制造业">制造业</option>
<option value="服务业" selected>服务业</option>
<%}%>
</select>
</p>
<p>
<input type="Submit" value="提交">
<input type="Reset" value="重置">
</p>
</form>
</body>
</html>