版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/85648700
用户注册以及用户登录往往共同使用一个java类,在本系统中也一样,不论是dao层、业务层、控制层都是共享同一个类,所以这两个功能就放在一起实现,
实现顺序依旧是:持久层——数据操作层(dao层)——事务层(service层)——控制层(controller层)——表现层(jsp层)
由于持久层在之前已经全部实现了,所以直接从dao层开始
一、实现dao层(数据操纵层)
dao层是由接口UserDao和映射文件UserDao组成的,
首先接口UserDao包含两个方法,分别是注册的方法和登录的方法,其详细代码如下所示:
package com.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.po.Buser;
@Repository("usrDao")
@Mapper
public interface UserDao {
public int register(Buser buser);
public List<Buser> login(Buser buser);
}
对应的映射文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.UserDao">
<select id="login" resultType="Buser" parameterType="Buser">
select * from busertable where bemail = #{bemail} and bpwd = #{bpwd}
</select>
<insert id="register" parameterType="Buser">
insert into busertable (id,bemail,bpwd) values(null,#{bemail},#{bpwd})
</insert>
</mapper>
二、实现事务层(service层)
此层是由service层接口和其实现类组成的
其接口中同样只有两个方法,一个是登录,一个是注册
package com.service.before;
import javax.servlet.http.HttpSession;
import org.springframework.ui.Model;
import com.po.Buser;
public interface UserService {
public String register(Buser buser ,Model model,HttpSession session);
public String login(Buser buser ,Model model,HttpSession session);
}
其接口实现类详细代码如下所示:
package com.service.before;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import com.dao.UserDao;
import com.po.Buser;
@Service("userSerice")
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public String register(Buser buser, Model model, HttpSession session,String code) {
if(!code.equalsIgnoreCase(session.getAttribute("code").toString())) {
model.addAttribute("codeError", "验证码错误!");
return "before/register";
}
int n =userDao.register(buser);
if(n > 0) {
return "before/login";
}else {
model.addAttribute("msg", "注册失败!");
return "before/register";
}
}
@Override
public String login(Buser buser, Model model, HttpSession session,String code) {
if (!code.equalsIgnoreCase(session.getAttribute("code").toString())) {
model.addAttribute("msg", "验证码错误!");
return "before/login";
}
Buser ruser = null;
List<Buser> list = userDao.login(buser);
if (list.size() > 0) {
ruser = list.get(0);
}
if(ruser != null) {
session.setAttribute("buser", ruser);
return "forward:/before";
}else {
model.addAttribute("msg","用户名或密码错误!");
return "before/login";
}
}
}
三、实现其控制层(controller层)
UserController详细代码如下所示:
package com.controller.before;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.po.Buser;
import com.service.before.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/register")
public String register(@ModelAttribute Buser buser ,Model model,HttpSession session,String code) {
return userService.register(buser, model, session, code);
}
@RequestMapping("/login")
public String login(@ModelAttribute Buser buser,Model model, HttpSession session, String code) {
return userService.login(buser, model, session, code);
}
@RequestMapping("/exit")
public String exit(HttpSession session) {
session.invalidate();
return "forward:/before";
}
}
四、实现jsp层(表现层)
本层共有两个文件,一个是注册的文件register.jsp 另一个是登录的文件login.jsp
其register.jsp详细代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<jsp:include page="head.jsp"></jsp:include>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<link href="css/before/daohang.css" rel="stylesheet" type="text/css" />
<link href="css/before/common.css" rel="stylesheet" type="text/css" />
<link href="css/before/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
//刷新验证码
function refreshCode(){
document.getElementById("code").src = "validateCode?" + Math.random();
}
//表单验证
function checkForm(){
var bpwd = document.registerForm.bpwd.value;
var rebpwd = document.registerForm.rebpwd.value;
if(bpwd != rebpwd){
alert("两次密码不一致!");
return false;
}
document.registerForm.submit();
return true;
}
</script>
</head>
<body>
<div class="clearfix">
<div class="blank20"></div>
<div class="box4">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" valign="bottom">
<h2>普通会员注册</h2>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div class="box4">
<div class="case_ll clearfix">
<div class="regist">
<form:form action="user/register" method="post" modelAttribute="buser" name="registerForm">
<table width="100%" border="0" cellspacing="0" cellpadding="0"
class="ttbb2">
<tr>
<td width="16%" align="right"><span class="cl_f30">*</span>
E-mail:</td>
<td width="59%"><input type="text" name="bemail"
id="textfield" class="my_txt_350" value="${buser.bemail}" /></td>
<td width="25%">${msg }</td>
</tr>
<tr>
<td align="right"> </td>
<td colspan="2" style="font-size: 12px; padding-bottom: 25px;">
(有效的E-mail地址才能收到激活码,帐户在激活后才能享受网站服务。)</td>
</tr>
<tr>
<td align="right"><span class="cl_f30">*</span> 密码:</td>
<td><input type="password" name="bpwd" id="textfield2"
class="my_txt_350" /></td>
<td> </td>
</tr>
<tr>
<td align="right"> </td>
<td colspan="2" style="font-size: 12px; padding-bottom: 25px;">
(为了您帐户的安全,建议使用字符+数字等多种不同类型的组合,且长度大于5位。)</td>
</tr>
<tr>
<td align="right"><span class="cl_f30">*</span> 重复密码:</td>
<td><input type="password" name="rebpwd" id="textfield3"
class="my_txt_350" /></td>
<td> </td>
</tr>
<tr>
<td align="right"> </td>
<td colspan="2" style="font-size: 12px; padding-bottom: 25px;">
(确保您记住密码。)</td>
</tr>
<tr>
<td align="right"><span class="cl_f30">*</span> 验证码:</td>
<td class="ared"><input type="text" name="code"
id="textfield5" class="my_txt_120" />
<img id="code" src="validateCode" />
<a href="javascript:refreshCode();"><font color="blue">看不清,换一个!</font></a>
</td>
<td>${codeError}</td>
</tr>
<tr>
<td align="right"> </td>
<td colspan="2" class="cl_f30" style="font-size: 12px; padding-bottom: 25px;"></td>
</tr>
<tr>
<td align="right"> </td>
<td height="50"><input type="button" name="button" id="button" onclick="checkForm()" value="注册账号" class="my_ann1" /></td>
<td> </td>
</tr>
</table>
</form:form>
<div class="blank20"></div>
</div>
</div>
</div>
<div class="blank10"></div>
</div>
</body>
</html>
登录文件login.jsp详细代码如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<jsp:include page="head.jsp"></jsp:include>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录页面</title>
<link href="css/before/daohang.css" rel="stylesheet" type="text/css" />
<link href="css/before/common.css" rel="stylesheet" type="text/css" />
<link href="css/before/style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
table{
text-align: center;
}
.textSize{
width: 200px;
height: 20px;
}
</style>
<script type="text/javascript">
//确定按钮
function gogo(){
document.loginform.submit();
}
//取消按钮
function cancel(){
document.loginform.action="";
}
function refreshCode(){
document.getElementById("code").src = "validateCode?" + Math.random();
}
</script>
</head>
<body>
<center>
<form:form action="user/login" method="post" modelAttribute="buser" name = "loginform">
<table>
<tr>
<td colspan="2"><img src="images/admin/login.gif"></td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input type="text" name="bemail" value="${buser.bemail }" class="textSize"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="bpwd" class="textSize"/></td>
</tr>
<tr>
<td>验证码:</td>
<td><input type="text" name="code" class="textSize"/></td>
</tr>
<tr>
<td>
<img id="code" src="validateCode"/>
</td>
<td class="ared">
<a href="javascript:refreshCode();"><font color="blue">看不清,换一个!</font></a>
</td>
</tr>
<tr>
<td colspan="2">
<input type="image" src="images/admin/ok.gif" onclick="gogo()">
<input type="image" src="images/admin/cancel.gif" onclick="cancel()">
</td>
</tr>
</table>
</form:form>
${msg }
</center>
</body>
</html>
五、测试
将项目发布到tomcat,重启tomcat,在浏览器网址栏输入http://localhost:8080/testshop1/toRegister
显示如下页面:
注册完成之后,点击登录:
至此注册和登录就算完成了!