这里主要用到4个程序代码:
程序代码 | 作用 |
---|---|
Register.java | 注册使用的javaBean,可以接收参数,同时进行判断,并返回错误的结果。 |
index.jsp | 注册信息填写页,同时会将输如错误的数据进行错误提示。 |
check.jsp | 将输入的表单数据自动赋给JavaBean,同时进行验证,如果失败则返回index.jsp。 |
success.jsp | 注册成功页。显示出用户注册成功的信息。 |
下面是演示代码:
Register.java
- package wml.demo;
- import java.util.HashMap ;
- import java.util.Map ;
- public class Register {
- private String name ;
- private String age ; // 这种接收参数的时候如果是用户自己输入的情况下,就是使用String
- private String email ;
- private Map<String,String> errors = null ;
- public Register(){
- this.name = "" ;
- this.age = "" ;
- this.email = "" ;
- this.errors = new HashMap<String,String>() ;
- }
- public boolean isValidate(){
- boolean flag = true ;
- if(!this.name.matches("\\w{6,15}")){
- flag = false ;
- this.name = "" ; // 清空原本的name内容
- this.errors.put("errname","用户名是6~15位的字母或数字。") ;
- }
- if(!this.email.matches("\\w+@\\w+\\.\\w+\\.?\\w*")){
- flag = false ;
- this.email = "" ; // 清空原本的name内容
- this.errors.put("erremail","输入的email地址不合法。") ;
- }
- if(!this.age.matches("\\d+")){
- flag = false ;
- this.age = "" ; // 清空原本的name内容
- this.errors.put("errage","年龄只能是数字。") ;
- }
- return flag ;
- }
- public String getErrorMsg(String key){
- String value = this.errors.get(key) ;
- return value==null?"":value ;
- }
- public void setName(String name){
- this.name = name ;
- }
- public void setAge(String age){
- this.age = age ;
- }
- public void setEmail(String email){
- this.email = email ;
- }
- public String getName(){
- return this.name ;
- }
- public String getAge(){
- return this.age ;
- }
- public String getEmail(){
- return this.email ;
- }
- }
index.jsp
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>这是标题</title></head>
- <%
- request.setCharacterEncoding("GBK") ;
- %>
- <jsp:useBean id="reg" scope="request" class="wml.demo.Register"/>
- <body>
- <form action="check.jsp" method="post">
- <span style="white-space:pre"> </span><!--其中name项一定要与javaBean中的名字匹配,不然getProperty不会得到相关信息,setProperty同理-->
- 用户名:<input type="text" name="name" value="<jsp:getProperty name="reg" property="name"/>"/> <%=reg.getErrorMsg("errname")%><br><!--其中的getProperty同getErrorMsg一样,都是在返回错误页的时候使用的,注意理解。-->
- 年 龄:<input type="text" name="age" value="<jsp:getProperty name="reg" property="age"/>"/> <%=reg.getErrorMsg("errage")%><br>
- E-MAIL:<input type="text" name="email" value="<jsp:getProperty name="reg" property="email"/>"/> <%=reg.getErrorMsg("erremail")%><br>
- <input type="submit" value="注册">
- <input type="reset" value="重置">
- </form>
- </body>
- </html>
check.jsp
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>这是标题</title></head>
- <%
- request.setCharacterEncoding("GBK") ;
- %>
- <jsp:useBean id="reg" scope="request" class="wml.demo.Register"/>
- <jsp:setProperty name="reg" property="*"/>
- <body>
- <%
- if(reg.isValidate()){
- %>
- <jsp:forward page="success.jsp"/>
- <%
- } else {
- %>
- <jsp:forward page="index.jsp"/>
- <%
- }
- %>
- </body>
- </html>
success.jsp
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>这是标题</title></head>
- <%
- request.setCharacterEncoding("GBK") ;
- %>
- <jsp:useBean id="reg" scope="request" class="wml.demo.Register"/>
- <body>
- 用户名:<jsp:getProperty name="reg" property="name"/><br>
- 年 龄:<jsp:getProperty name="reg" property="age"/><br>
- E-MAIL:<jsp:getProperty name="reg" property="email"/><br>
- </body>
- </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.