本文章要实现的功能如下:
1、首页未登录状态:
2、首页已登录状态:
(这篇文章先不涉及下方图书信息的显示,该部分内容将在后续文章进行)
3、修改密码功能
4、注销用户功能
一、编写主界面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!--导入JSTL标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>首页</title>
</head>
<body>
<br />
<center><h3>欢迎进入图书管理系统</h3></center>
<br /><br />
<c:choose> <%-- 判断用户信息是否存在在session中,如果不存在,则显示登录页面链接 --%>
<c:when test="${sessionScope.user==null}">
<a href="${pageContext.request.contextPath}/login.jsp">用户登录</a>
</c:when>
<c:otherwise> <%-- 如果存在,则直接显示用户信息 --%>
欢迎你,${sessionScope.user.username }!
<a href="${pageContext.request.contextPath}/updatePwd.jsp">修改密码</a>
<a href="${pageContext.request.contextPath}/LogoutServlet">注销</a>
<hr /><br />
</c:otherwise>
</c:choose>
</body>
</html>
二、编写自动登录过滤器
新建Filter类文件,起名为AutoLoginFilter
为该文件添加Filter接口
在该文件的doFilter()方法里添加过滤操作
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) req;
//获取cookie对象
Cookie[] cookies=request.getCookies();
String autoLogin=null;
//遍历cookie对象的所有信息,判断用户是否选择了自动登录选项
for(int i=0;cookies!=null&&i<cookies.length;i++) {
if("autologin".equals(cookies[i].getName())) {
//用户选择了自动登录,获取存在cookie里的用户信息
autoLogin=cookies[i].getValue();
break;
}
}
if(autoLogin!=null) {
//提取用户的用户名和密码
String[] parts=autoLogin.split("-");
String username=parts[0];
String password=parts[1];
UserDaoImp udi=new UserDaoImp();
//判断cookie里的信息是否和数据库中信息相匹配,如果匹配成功,则将信息存到session中,便于后面的调用
if(udi.search(username, password)) {
User user=new User();
user.setUsername(username);
user.setPassword(password);
request.getSession().setAttribute("user", user);
}
}
chain.doFilter(request, response);
}
三、在web.xml文件配置过滤器信息
<filter>
<filter-name>AutoLoginFilter</filter-name>
<filter-class>filter.AutoLoginFilter</filter-class>
</filter>
<filter-mapping> <!--该元素用来设置过滤器要拦截的资源 -->
<filter-name>AutoLoginFilter</filter-name>
<url-pattern>/bookManage/index.jsp</url-pattern>
</filter-mapping>
四、编写修改密码界面及后台servlet
修改密码所需要的接口:
boolean update(String username,String password);
接口实现:
public boolean update(String username, String password) {
// TODO Auto-generated method stub
boolean flag=false;
DBCon dbcon=new DBCon();
cn=dbcon.getConnection();
String sql="update register set password=? where username=?";
try {
psm=cn.prepareStatement(sql);
psm.setString(1, password);
psm.setString(2, username);
if(psm.executeUpdate()!=0) {
flag=true;
}
cn.close();
psm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
updatePwd.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图书管理系统修改密码</title>
</head>
<center><h3>图书管理系统修改密码</h3></center>
<body style="text-align:center">
<form action="${pageContext.request.contextPath}/UpdatePwdServlet" method="post">
<table border="0" width="350px" cellpadding="0" cellspacing="0" align="center" style="background:#CFF;">
<tr>
<td height="50" align="center">修改前密码:
<input type="password" name="usedPwd" /></td>
</tr>
<tr>
<td height="50" align="center">修改后密码:
<input type="password" name="pwd" /></td>
</tr>
<tr>
<td height="50">
<input type="submit" value="修改" />
<inut type="reset" value="重置" />
</td>
</tr>
</table>
</form>
</body>
</html>
UpdatePwdServlet.java:
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 daoImp.UserDaoImp;
import entity.User;
@WebServlet("/UpdatePwdServlet")
public class UpdatePwdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UpdatePwdServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String usedPwd=request.getParameter("usedPwd");
String pwd=request.getParameter("pwd");
User user=new User();
user=(User) request.getSession().getAttribute("user");
UserDaoImp udi=new UserDaoImp();
if(udi.update(user.getUsername(), pwd)) {
//修改完成后跳转到登录页面
String url="boolManage/login.jsp";
response.sendRedirect(url);
}
}
}
五、编写LogoutServlet类,实现注销功能
实现注销功能需要的接口:
boolean delete(String username);
接口实现:
public boolean delete(String username) {
// TODO Auto-generated method stub
boolean flag=false;
DBCon dbcon=new DBCon();
cn=dbcon.getConnection();
String sql="delete from register where username=?";
try {
psm=cn.prepareStatement(sql);
psm.setString(1, username);
if(psm.executeUpdate()!=0) {
flag=true;
}
cn.close();
psm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
LogoutServlet.java:
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import daoImp.UserDaoImp;
import entity.User;
@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LogoutServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user=new User();
//获取要注册的用户信息
user=(User) request.getSession().getAttribute("user");
//删除保存在session里的用户信息
request.getSession().removeAttribute("user");
//获取浏览器里的cookie对象
Cookie[] cookies=request.getCookies();
//判断cookie里是否存有要注销的用户信息,如果有则删除
for(int i=0;cookies!=null&&i<cookies.length;i++) {
if("autologin".equals(cookies[i].getName())) {
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);
break;
}
}
UserDaoImp udi=new UserDaoImp();
udi.delete(user.getUsername());
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}