(SSM练习)网上商城项目(十二)——实现用户注册和用户登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 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">&nbsp;</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>&nbsp;</td>
							</tr>
							<tr>
								<td align="right">&nbsp;</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>&nbsp;</td>
							</tr>
							<tr>
								<td align="right">&nbsp;</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">&nbsp;</td>
								<td colspan="2" class="cl_f30" style="font-size: 12px; padding-bottom: 25px;"></td>
							</tr>
							<tr>
								<td align="right">&nbsp;</td>
								<td height="50"><input type="button" name="button" id="button" onclick="checkForm()" value="注册账号" class="my_ann1" /></td>
								<td>&nbsp;</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  

显示如下页面:

注册完成之后,点击登录:

至此注册和登录就算完成了!

猜你喜欢

转载自blog.csdn.net/qq_40788630/article/details/85648700