完成一个简单注册验证程序,验证用户名,年龄,邮箱。如果用户输入正确则可以进行输入内容的显示,当不正确时,错误信息进行提示,正确信息保留。需要三个页面:
index.jsp 和sucess.jsp和check.jsp。
首先是index.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>index</title>
<%request.setCharacterEncoding("GBK"); %>
</head>
<body>
<jsp:useBean id="reg" scope="request" class="demo20221018.Register"></jsp:useBean>
<form action="check.jsp" method="post">
用户名:<input type="text" name="name" value="<jsp:getProperty name="reg" property="name"/>"><%=reg.getErrorMsg("errname") %><br>
年龄<input type="text" name="age" value="<jsp:getProperty name="reg" property="age"/>"><%=reg.getErrorMsg("errage") %><br>
邮箱:<input type="text" name="email" value="<jsp:getProperty name="reg" property="email"/>"><%=reg.getErrorMsg("erremail") %><br>
<input type="submit" value="注册"><br>
<input type="reset" value="重置"></form>
</body>
</html>
接下来是Register.java
package demo20221018;
import java.util.HashMap;
import java.util.Map;
public class Register {
private String name;
private String age;
private String email;
Map<String,String> errors=null;
public Register()
{
name="";
email="";
age="";
errors=new HashMap<String,String>();
}
public boolean isValidate()
{
boolean flag=true;
if(!name.matches("\\w{6,15}")) {
flag=false;
this.name="";
errors.put("errname", "用户名输入的是6-15位的数字");
}
if(!email.matches("\\w+@\\w+\\.\\w+\\.?\\w")){
flag=false;
this.email="";
errors.put("erremail", "邮箱输入不正确");
}
if(!age.matches("\\d+")) {
flag=false;
this.age="";
errors.put("errage","年龄只能是数字");
}
return flag;
}
//取出对应的错误信息
public String getErrorMsg(String key)
{
String value=this.errors.get(key);
return value==null?"":value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
check.jsp页面
<%@ page language="java" contentType="text/html"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%request.setCharacterEncoding("GBK"); %>
<jsp:useBean id="reg" scope="request" class="demo20221018.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 language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%request.setCharacterEncoding("GBK"); %>
<jsp:useBean id="reg" scope="request" class="demo20221018.Register"/>
</head>
<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>
必须注意JavaBean里面scope的范围:
- page:保存在一页中,跳转后无效
- request:一个JavaBean对象可以保存在一次服务器跳转的范围中
- session:在一个用户的操作范围中保存,重新开浏览器才会声明新的
- application:在整个服务器上保存,服务器关闭后才会消失
本人就是因为scope范围写错导致一直运行不出来,还要注意验证的正则表达式是否正确,编码方式是否正确(可能会导致乱码)