本文章要实现的功能如下:

1、首页未登录状态:

java图书查询菜单界面在哪 java图书管理系统登录界面_html


2、首页已登录状态:

(这篇文章先不涉及下方图书信息的显示,该部分内容将在后续文章进行)

java图书查询菜单界面在哪 java图书管理系统登录界面_jsp_02


3、修改密码功能

java图书查询菜单界面在哪 java图书管理系统登录界面_User_03

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

java图书查询菜单界面在哪 java图书管理系统登录界面_User_04


为该文件添加Filter接口

java图书查询菜单界面在哪 java图书管理系统登录界面_jsp_05


在该文件的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);
	}