人机界面课团队完成影院管理系统界面的设计,在此基础上添加后台。
首先先完善注册和登录的功能。
注册:使用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);
}
}
本文介绍了影院管理系统后台的注册功能实现,采用JavaMail向用户邮箱发送激活邮件,邮件内附带激活链接。用户点击链接后完成账号激活。详细讲述了注册过程中的界面逻辑、UserDao及UserManager类的角色,以及数据库操作和邮件发送方法。
: 注册&spm=1001.2101.3001.5002&articleId=72836183&d=1&t=3&u=261f4eabbecb4513b86808dc13c636f5)
4956

被折叠的 条评论
为什么被折叠?



