就拿注册的例子来说,当注册时填写的数据不符合规范时,会在当前页面显示一些错误信息.
首先有一个User类:
package com.lm.domain;
import java.util.HashMap;
import java.util.Map;
public class User {
private String username;
private String password;
private String repassword;
private Map<String, String> errorMap;
public Map<String, String> isValidate11() {
errorMap = new HashMap<>();
if("".equals(username)&&username==null) {
errorMap.put("username_msg", "用户名不能为空");
}else if(!username.matches("^[a-z0-9A-Z]{6,}$")) {
errorMap.put("username_msg", "用户名至少为六位的数字或者字母");
}
if("".equals(password)&&password==null) {
errorMap.put("password_msg", "密码不能为空");
}else if(!password.matches("^[0-9]{6,}$")){
errorMap.put("password_msg", "密码至少为六位的数字或者字母");
}
if(!password.equals(repassword)) {
errorMap.put("repassword_msg", "您两次输入的密码不一致");
}
return errorMap;
}
public Map<String, String> isValidate12() {
errorMap = new HashMap<>();
if("".equals(username)&&username==null) {
errorMap.put("username_msg", "用户名不能为空");
}else if(!username.matches("^[a-z0-9A-Z]{6,}$")) {
errorMap.put("username_msg", "用户名至少为六位的数字或者字母");
}
if("".equals(password)&&password==null) {
errorMap.put("password_msg", "密码不能为空");
}else if(!password.matches("^[0-9]{6,}$")){
errorMap.put("password_msg", "密码至少为六位的数字或者字母");
}
return errorMap;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
里面的errorMap是封装错误信息的属性.(在这里我们只看注册校验,所以isValidate12()方法不用看)
其次是jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<body style="align:center;border:0px; margin-top: 200px;margin-left: 600px">
<form action="RegisterServlet" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td><br>
<td><font color="red" size=1>${register_msg.username_msg}</font></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" style="width: 149px; "></td><br>
<td><font color="red" size=1>${register_msg.password_msg}</font></td>
</tr>
<tr>
<td>确认密码</td>
<td><input type="password" name="repassword" style="width: 154px; "></td><br>
<td><font color="red" size=1>${register_msg.repassword_msg}</font></td>
</tr>
<tr>
<td> </td>
<td> <input type="submit" value="注册" style="width: 141px; "></td>
</tr>
</table>
</form>
</body>
</html>
servlet:注意看错误信息是怎么封装到map里面的.
package com.lm.web;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import com.lm.domain.User;
import com.lm.exception.UserException;
import com.lm.service.UserService;
import com.lm.service.impl.UserServiceImpl;
/**
* Servlet implementation class RegisterServlet
*/
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap());
Map<String,String> map = user.isValidate11();
if(map!=null&&map.size()>0) {
request.setAttribute("register_msg",map);
request.getRequestDispatcher("register.jsp").forward(request, response);
return;
}
UserService userService = new UserServiceImpl();
userService.AddUser(user);
System.out.println("用户插入成功");
request.getSession().setAttribute("login_user", user);
request.getRequestDispatcher("will_login.jsp").forward(request, response);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (UserException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
总结上述:如果有错误就会执行跳转和return,不会执行return下面的语句.之后错误信息会在jsp页面进行显示(因为错误信息已经封装好了,只需要跳转到jsp页面,之后错误信息就会通过EL表达式进行展现出来).