影院管理系统的后台(一): 注册

本文介绍了影院管理系统后台的注册功能实现,采用JavaMail向用户邮箱发送激活邮件,邮件内附带激活链接。用户点击链接后完成账号激活。详细讲述了注册过程中的界面逻辑、UserDao及UserManager类的角色,以及数据库操作和邮件发送方法。

人机界面课团队完成影院管理系统界面的设计,在此基础上添加后台。

首先先完善注册和登录的功能。

注册:使用JavaMail的方法,向一个邮箱发送邮件,邮件里包含一个链接,点击链接后激活。

界面登录代码:

<%@ 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>剧院管理系统</title>
		<script type="text/javascript" src="${pageContext.request.contextPath}/jquery/jquery-3.1.1.min.js"></script>
		<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/bootstrap.css">
		<style>
			body {
				background: url(img/2.jpg) ;
				background-size:cover;
			}
			
			.container {
				width: 50%;
				height: 50%;
				color: white;
				font-size: 16px;
				font-family: arial;
				text-align: center;
				margin-top: 10%;
				margin-left:30%;
			}
			.form-horizontal{
				padding: 35px 45px;
			}
			.form-top {		
				overflow: hidden;
				padding: 10px 25px;
				line-height: 20px;
				background: white;
				color: gray;
				-moz-border-radius: 4px 4px 0 0;
				-webkit-border-radius: 4px 4px 0 0;
				border-radius: 4px 4px 0 0;
			}
			
			.form-top span {
				font-size: 20px;
				font-weight: 700;
			}
			.login {
				top: 30%;
				box-shadow: 0 2px 6px 0 black;
				text-align: center;
			}
			.form-bottom{
				background: darkgray;
				-moz-border-radius:0 0 4px 4px ;
				-webkit-border-radius: 0 0 4px 4px ;
				border-radius:0 0 4px 4px ;
				opacity: 0.9;
			}
			.btn-block {
				padding: 0 -15px;
			}
			
			.form-horizontal .form-group {
				margin-left: 0;
				margin-right: 0;
			}
		</style>
		
	</head>

	<body>

		<div class="container">			
			<div class="row">
				<div class="col-md-4 col-md-offset-4">
					<div class="login ">
						<div class="form-top">
							<span>用  户  登  录</span>
						</div>
						<div  class="form-bottom">
						  <div  class="form-horizontal">
						  <form action="LoginServlet" method="post">
							<div class="form-group ">
								<input type="text" class="form-control" name="username">
							</div>
							<div class="form-group ">
								<input type="password" class="form-control" name="password">
							</div>
							<input type="submit" id="login-btn" class="btn btn-success btn-block"  value="登陆"/>
							</form>
							<form action="register.jsp" method="post">
                            <input type="submit" id="register-btn" class="btn btn-success btn-block"  value="注册"/>
                            </form>
					   	<div class="radio radio-inline">
								<label>
    							<input type="radio" name="optionsRadios" id=" manager" value="manager" checked>经理
  								</label>
							</div>
							<div class="radio radio-inline">
								<label>
   								 <input type="radio" name="optionsRadios" id="administrator" value="administrator">管理员
 								 </label>
							</div>
							<div class="radio radio-inline">
								<label>
   								 <input type="radio" name="optionsRadios" id="seller" value="seller">售票员
 								 </label>
							</div>
					
					</div>
					</div>
					</div>
				</div>
			</div>
		</div>
	</body>
		
</html>
(红色文本)点击注册按钮,跳转到注册界面:

注册界面代码:

<%@ 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>用户注册界面</title>
<style type="text/css">
    body {
				background: url(img/back.jpg) ;
				background-size:cover;
			}
</style>
</head>
<body>
     <h2>注册页面</h2>
<hr/>
<form method="POST" action="RegisterServlet">
<table align="center">
	<tr>
	<td><label for="username">用户名:</label></td>
	<td><input type="text" name="username" /></td>
	</tr>
	<tr>
	<td><label for="password">密码:</label></td>
	<td><input type="password" name="password" /></td>
	</tr>
	<tr>
	<td><label for="email">邮箱:</label></td>
	<td><input type="text" name="email"/></td>
	</tr>
	<tr>
	<td colspan="2" align="center"><input type="submit" value="注册" /></td>
	</tr>
</table>
</form>
</body>
</html>

跳转逻辑:


编写两个类:UserDao,UserManager

UserManager类包含的方法:

注册用户(生成激活码,并调用UserDao的AddUser添加用户,调用发送邮件方法):

public Boolean Register(String username,String password,String email){
		Boolean result=false;
		//生成用户code
		String code=UUID.randomUUID().toString().replace("-", "");
		
		//添加用户
		UserDao userDao=new UserDao();
		result=userDao.AddUser(username, password, email, code);
		
		//向用户发送激活邮件
		sendMail(email,code);
		
		return result;
	}
	

发送激活邮件(使用JavaMail发送,邮件内容为一个链接(跳转到ActiveServlet-激活激活码)):

public static boolean sendMail(String to, String code) {  
        try {  
            Properties props = new Properties();  
            props.put("username", "发送邮箱名");   
            props.put("password", "邮箱密码");   
            props.put("mail.transport.protocol", "smtp" );  
            props.put("mail.smtp.host", "smtp.163.com");  
            props.put("mail.smtp.port", "25" ); 
            Session mailSession = Session.getDefaultInstance(props);  
            
            Message msg = new MimeMessage(mailSession);     
            msg.setFrom(new InternetAddress("15929243619@163.com"));  
            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to));   
            msg.setSubject("激活邮件");   
            msg.setContent("<h1>此邮件为官方激活邮件!请点击下面链接完成激活操作!</h1><h3><a href='http://localhost:8080/ONETTMS/ActiveServlet?code="+code+"'>http://localhost:8080/ONETTMS/ActiveServlet</a></h3>","text/html;charset=UTF-8");
            msg.saveChanges();  
            Transport transport = mailSession.getTransport("smtp");  
            transport.connect(props.getProperty("mail.smtp.host"), props  
                    .getProperty("username"), props.getProperty("password"));   
            transport.sendMessage(msg, msg.getAllRecipients());  
            transport.close();     
        } catch (Exception e) {  
            e.printStackTrace();  
            System.out.println(e);  
            return false;  
        }  
        return true;  
    }   

激活用户(通过激活码找到对应的用户名,调用UserDao的setState方法将用户设为可用):

public Boolean Active(String code){
		UserDao userDao=new UserDao();
		String username=userDao.findUserByCode(code);
		if(username!=null && username!=""){
			//如果存在用户,将此用户状态设为可用
			userDao.setState(username);
			return true;
		}else{
			return false;
		}
	}

UserDao包含的方法:

向数据库中添加用户(用户信息:用户名,密码,邮箱,激活码,状态):

	public Boolean AddUser(String username,String password,String email,String code){
		Boolean result=false;
		Connection conn=null;
		String sql="insert into t_user(username,password,email,code,state) values(?,?,?,?,?)";
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//建立连接
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/SendMail","root","密码");
			PreparedStatement pstmt=conn.prepareStatement(sql);
			pstmt.setString(1,username);
			pstmt.setString(2,password);
			pstmt.setString(3,email);
			pstmt.setString(4,code);
			pstmt.setInt(5,0);
			result=pstmt.execute();
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}

获得激活码对应的用户名:

public String findUserByCode(String code) {
		String username="";
		Connection conn=null;
		ResultSet rs=null;
		String sql="select username from t_user where code=?";
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//建立连接
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/SendMail","root","密码");
			PreparedStatement pstmt=conn.prepareStatement(sql);
			pstmt.setString(1,code);			
			rs=pstmt.executeQuery();
			if(rs.next()){
				username=rs.getString("username");
			}			
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return username;
	}

将用户状态设为可用(通过 已知的用户名):

public Boolean setState(String username) {
		Boolean result=false;
		Connection conn=null;
		String sql="update t_user set state=1 where username=?";
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//建立连接
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/SendMail","root","密码");
			PreparedStatement pstmt=conn.prepareStatement(sql);
			pstmt.setString(1,username);
			int i=pstmt.executeUpdate();
			if(i>0){
				result=true;
			}
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}

(注册界面的红色文本)跳转到了RegisterServlet

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.UserManager;


@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {

	private static final long serialVersionUID = -4330309819191817539L;

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String username=req.getParameter("username");
		String password=req.getParameter("password");
		String email=req.getParameter("email");
		UserManager userManager=new UserManager();
		if(userManager.Register(username, password, email)){
			//注册成功后,转发到成功界面	
			req.setAttribute("message", "注册成功!");
			req.getRequestDispatcher("/succes.jsp").forward(req,resp);
		}
	}


}

这样的话,就已经向数据库里添加了用户,但是这个时候用户的状态还是初始状态。去用户填写的邮箱,已经收到了激活邮件,点击邮件中的链接,链接包含了激活码。所以在ActiveServlet中可以通过request获取传递过来的code,然后调用方法激活。

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.UserManager;


@WebServlet("/ActiveServlet")
public class ActiveServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String code=req.getParameter("code");
		UserManager userManager=new UserManager();
		if(userManager.Active(code)){
			//激活成功后,转发到成功界面		
			req.setAttribute("message", "激活成功!");
			req.getRequestDispatcher("/succes.jsp").forward(req,resp);
		}
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req,resp);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值