JSP的注册验证功能的实现

来源:互联网 发布:天涯明月刀捏脸数据 编辑:程序博客网 时间:2024/05/16 17:29
主要是利用Javabean的技术实现用户的注册功能,没有涉及到数据库的设计。
这里主要用到4个程序代码:
程序代码作用Register.java注册使用的javaBean,可以接收参数,同时进行判断,并返回错误的结果。index.jsp注册信息填写页,同时会将输如错误的数据进行错误提示。check.jsp将输入的表单数据自动赋给JavaBean,同时进行验证,如果失败则返回index.jsp。 success.jsp注册成功页。显示出用户注册成功的信息。
下面是演示代码:

Register.java

[java] view plaincopyprint?
  1. package wml.demo;  
  2. import java.util.HashMap ;  
  3. import java.util.Map ;  
  4. public class Register {  
  5.     private String name ;  
  6.     private String age ;    // 这种接收参数的时候如果是用户自己输入的情况下,就是使用String  
  7.     private String email ;  
  8.     private Map<String,String> errors = null ;  
  9.     public Register(){  
  10.         this.name = "" ;  
  11.         this.age = "" ;  
  12.         this.email = "" ;  
  13.         this.errors = new HashMap<String,String>() ;  
  14.     }  
  15.     public boolean isValidate(){  
  16.         boolean flag = true ;  
  17.         if(!this.name.matches("\\w{6,15}")){  
  18.             flag = false ;  
  19.             this.name = "" ;    // 清空原本的name内容  
  20.             this.errors.put("errname","用户名是6~15位的字母或数字。") ;  
  21.         }  
  22.         if(!this.email.matches("\\w+@\\w+\\.\\w+\\.?\\w*")){  
  23.             flag = false ;  
  24.             this.email = "" ;   // 清空原本的name内容  
  25.             this.errors.put("erremail","输入的email地址不合法。") ;  
  26.         }  
  27.         if(!this.age.matches("\\d+")){  
  28.             flag = false ;  
  29.             this.age = "" ; // 清空原本的name内容  
  30.             this.errors.put("errage","年龄只能是数字。") ;  
  31.         }  
  32.         return flag ;  
  33.     }  
  34.     public String getErrorMsg(String key){  
  35.         String value = this.errors.get(key) ;  
  36.         return value==null?"":value ;  
  37.     }  
  38.     public void setName(String name){  
  39.         this.name = name ;  
  40.     }  
  41.     public void setAge(String age){  
  42.         this.age = age ;  
  43.     }  
  44.     public void setEmail(String email){  
  45.         this.email = email ;  
  46.     }  
  47.     public String getName(){  
  48.         return this.name ;  
  49.     }  
  50.     public String getAge(){  
  51.         return this.age ;  
  52.     }  
  53.     public String getEmail(){  
  54.         return this.email ;  
  55.     }  
  56. }  

index.jsp
[html] view plaincopyprint?
  1. <%@ page contentType="text/html" pageEncoding="GBK"%>  
  2. <html>  
  3. <head><title>这是标题</title></head>  
  4. <%  
  5.     request.setCharacterEncoding("GBK") ;  
  6. %>  
  7. <jsp:useBean id="reg" scope="request" class="wml.demo.Register"/>  
  8. <body>  
  9. <form action="check.jsp" method="post">  
  10. <span style="white-space:pre">  </span><!--其中name项一定要与javaBean中的名字匹配,不然getProperty不会得到相关信息,setProperty同理-->  
  11.     用户名:<input type="text" name="name" value="<jsp:getProperty name="reg" property="name"/>"/> <%=reg.getErrorMsg("errname")%><br><!--其中的getProperty同getErrorMsg一样,都是在返回错误页的时候使用的,注意理解。-->  
  12.     年  龄:<input type="text" name="age" value="<jsp:getProperty name="reg" property="age"/>"/> <%=reg.getErrorMsg("errage")%><br>  
  13.     E-MAIL:<input type="text" name="email" value="<jsp:getProperty name="reg" property="email"/>"/> <%=reg.getErrorMsg("erremail")%><br>  
  14.     <input type="submit" value="注册">  
  15.     <input type="reset" value="重置">  
  16. </form>  
  17. </body>  
  18. </html>  


check.jsp
[html] view plaincopyprint?
  1. <%@ page contentType="text/html" pageEncoding="GBK"%>  
  2. <html>  
  3. <head><title>这是标题</title></head>  
  4. <%  
  5.     request.setCharacterEncoding("GBK") ;  
  6. %>  
  7. <jsp:useBean id="reg" scope="request" class="wml.demo.Register"/>  
  8. <jsp:setProperty name="reg" property="*"/>  
  9. <body>  
  10. <%  
  11.     if(reg.isValidate()){  
  12. %>  
  13.         <jsp:forward page="success.jsp"/>  
  14. <%   
  15.     } else {  
  16. %>  
  17.         <jsp:forward page="index.jsp"/>  
  18. <%  
  19.     }  
  20. %>  
  21. </body>  
  22. </html>  

success.jsp

[html] view plaincopyprint?
  1. <%@ page contentType="text/html" pageEncoding="GBK"%>  
  2. <html>  
  3. <head><title>这是标题</title></head>  
  4. <%  
  5.     request.setCharacterEncoding("GBK") ;  
  6. %>  
  7. <jsp:useBean id="reg" scope="request" class="wml.demo.Register"/>  
  8. <body>  
  9.     用户名:<jsp:getProperty name="reg" property="name"/><br>  
  10.     年  龄:<jsp:getProperty name="reg" property="age"/><br>  
  11.     E-MAIL:<jsp:getProperty name="reg" property="email"/><br>  
  12. </body>  
  13. </html>  

显示效果:
当输入的用户名不合法时,直接在index中显示错误信息,显示下图效果:
   
当正确输入时,跳转到success.jsp页面:

起初该句:

<input type="text" name="name" value="<jsp:getProperty name="reg" property="name"/>"/> <%=reg.getErrorMsg("errname")%>

value="<jsp:getProperty name="reg" property="name"/>"不理解。因为jsp:getProperty标签相当于javabean中的getter方法。而value是需要输入的,怎么能用jsp:getProperty为其赋值呢?

分析:搞清楚程序的执行顺序。

先执行index.jsp文件,该文件中创建了一个reg对象。有构造函数知reg类中name,age,email,errors都为空,所以value="<jsp:getProperty name="reg" property="name"/>此时为空字串,所以表单显示时是空白的。当向表单中输入内容后,比如:name表单中输入:Tom,年龄输入:25,email输入:aaaa。当按下提交时,转到check.jsp进行处理,首先执行:

<jsp:setProperty name="reg" property="*"/>  ,即使用表单中的内容为reg类赋值。此时reg类中,name=Tom,age=25,email=aaaa.

然后执行语句:if(reg.isValidate()),调用isValidate()函数,因为tom和email不符合正则表单式,所以name和email重新赋值为空,即:

this.name = "" ; this.email = "" ;而年龄附和正则表达式,则age=25不变,且函数返回false.故跳转到:index.jsp,此时由于name="",age=25,email="",所以<jsp:getProperty name="reg" property="name"/>"为空,即name表单为空的,email表单同理为空。而

<jsp:getProperty name="reg" property="age"/>"为25,故age表单中显示25.

0 0