使用JSP处理HTML表单--表单验证及传递

使用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;&nbsp;&nbsp;&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>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值