MVC案例——注册用户
页面使用重定向可以避免表单的重复提交问题
如果页面中需要使用域对象中的属性,必须使用转发。此外都使用重定向。
逻辑关系:
点击超链——>add.jsp(接收meg信息,接收参数的值)——>add.do(判断用户名是否存在)——存在(放入meg信息到request域中)——>add.jsp
——不存在(重定向)——>success.jsp
步骤:
1.在query.jsp中点击新建用户的超链接,跳转页面为当前目录的add.jsp

2.add.jsp内容
<body>
<%
Object meg = request.getAttribute("message");
if (meg!=null){
%>
<br>
<b style="color: red"><%=meg%></b>
<br><br>
<%
}
%>
<form action="add.do" method="post">
<table>
<tr>
<td>CustomerName:</td>
<td><input type="text" name="name" value="<%=request.getParameter("name")==null?"":request.getParameter("name")%>"></td>
</tr>
<tr>
<td>CustomerPassword:</td>
<td><input type="password" name="password" value="<%=request.getParameter("password")==null?"":request.getParameter("password")%>"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="添加" ></td>
</tr>
</table>
</form>
</body>
3.add.do
private void add(HttpServletRequest req, HttpServletResponse resp) {
//1.获取表单参数:name,address,phone
String name = req.getParameter("name");
String password = req.getParameter("password");
//2.检验name是否存在:
//2.1调用CustomerDAO的getCountWithName(String name)获取name在数据库中是否存在
long count = customerDAO.getCountWithName(name);
//2.2若返回值大于0,则响应add.jsp页面:
//通过转发的方式来响应add.jsp
if (count>0){
//2.2.1要求在add.jsp页面显示一个错误信息:用户名name已经被占用,请重新选择
req.setAttribute("message","用户名"+name+"已经被占用,请重新选择!");
//2.2.2add.jsp的表单值可以回显
//通过value="<%= request.getParameter("name")==null?"" : request.getParameter("name")%>"
try {
req.getRequestDispatcher("add.jsp").forward(req,resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return;
}
Customer customer = new Customer(name,password);
customerDAO.save(customer);
try {
resp.sendRedirect("success.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}
4.success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<b>ADD SUCCESS</b>
<br><br>
<a href="query.jsp">return</a>
</body>
</html>
效果图:


浙公网安备 33010602011771号