1、编写login.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>系统登录 - 超市订单管理系统</title>
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css">
</head>
<body class="login_bg">
<section class="loginBox">
<header class="loginHeader">
<h1>超市订单管理系统</h1>
</header>
<section class="loginCont">
<form class="loginForm" action="${pageContext.request.contextPath}/login.do" name="actionForm" id="actionForm" method="post">
<div class="info">
${error}
</div>
<div class="inputbox">
<label>用户名:</label>
<input type="text" class="input-text" id="userCode" name="userCode" placeholder="请输入用户名" required>
</div>
<div class="inputbox">
<label>密码:</label>
<input type="password" class="input-text" id="userPassword" name="userPassword" placeholder="请输入密码" required>
</div>
<div class="subBtn">
<input type="submit" value="登录">
<input type="reset" value="重置">
</div>
</form>
</section>
</section>
</body>
</html>
2、在web.xml中设置启动页面及Session过期时间设置
<!--设置欢迎页面-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!--默认Session过期时间-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3、编写dao层登录用户的接口
package com.smbms.dao.user;
import com.smbms.pojo.User;
import java.sql.Connection;
public interface UserDao {
//得到要登录的用户
public User getLoginUser(Connection connection,String userCode,String password);
}
4、编写dao接口的实现类
package com.smbms.dao.user;
import com.smbms.dao.BaseDao;
import com.smbms.pojo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
public User getLoginUser(Connection connection, String userCode,String password) {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
User user = null;
if (connection != null) {
String sql = "select * from smbms_user where userCode=? and userPassword=?";
Object[] params = {userCode,password};
try {
resultSet = BaseDao.execute(connection, preparedStatement, resultSet, sql, params);
if (resultSet.next()) {
user = new User();
user.setId(resultSet.getInt("id"));
user.setUserCode(resultSet.getString("userCode"));
user.setUserName(resultSet.getString("userName"));
user.setUserPassword(resultSet.getString("userPassword"));
user.setGender(resultSet.getInt("gender"));
user.setBirthday(resultSet.getDate("birthday"));
user.setPhone(resultSet.getString("phone"));
user.setAddress(resultSet.getString("address"));
user.setUserRole(resultSet.getInt("userRole"));
user.setCreatedBy(resultSet.getInt("createdBy"));
user.setCreationDate(resultSet.getTimestamp("creationDate"));
user.setModifyBy(resultSet.getInt("modifyBy"));
user.setModifyDate(resultSet.getTimestamp("modifyDate"));
}
BaseDao.closeResource(null, resultSet, preparedStatement);
} catch (SQLException e) {
e.printStackTrace();
}
}
return user;
}
}
5、业务层接口
package com.smbms.service.user;
import com.smbms.pojo.User;
public interface UserService {
//用户登录
public User login(String userCode,String password);
}
6、业务层接口实现类
package com.smbms.service.user;
import com.smbms.dao.BaseDao;
import com.smbms.dao.user.UserDao;
import com.smbms.dao.user.UserDaoImpl;
import com.smbms.pojo.User;
import org.junit.Test;
import java.sql.Connection;
public class UserServiceImpl implements UserService {
//业务层调用Dao层,所以要引用Dao层
private UserDao userDao;
public UserServiceImpl() {
userDao = new UserDaoImpl();
}
public User login(String userCode, String password) {
Connection connection = null;
User user = null;
try {
connection = BaseDao.getConnection();
user=userDao.getLoginUser(connection, userCode,password);
}
catch (Exception e){
e.printStackTrace();
}
finally {
BaseDao.closeResource(connection,null,null);
}
return user;
}
}
7、编写登录Servlet
package com.smbms.servlet.user;
import com.smbms.pojo.User;
import com.smbms.service.user.UserService;
import com.smbms.service.user.UserServiceImpl;
import com.smbms.util.Constants;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入LoginServlet-start ......");
//获取用户名与密码
String userCode = req.getParameter("userCode");
String userPassword = req.getParameter("userPassword");
//与数据库中的密码进行比对,调用业务层
UserService userService =new UserServiceImpl();
User user = userService.login(userCode, userPassword);
if(user!=null){
//将用户的信息放到session中
req.getSession().setAttribute(Constants.USER_SESSION,user);
//跳转页面
resp.sendRedirect("jsp/frame.jsp");
}
else {
//用户不存在
req.setAttribute("error","用户名或密码不正确!!");
req.getRequestDispatcher("login.jsp").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
8、在web.xml注册Servlet
<!--用户登录Servlet注册-->
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.smbms.servlet.user.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
9、运行Tomcat输入用户名密码进行登录
10、退出登录功能实现
1、编写退出登录Servlet类
package com.smbms.servlet.user;
import com.smbms.util.Constants;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
//移除用户登录的Constants.USER_SESSION
req.getSession().removeAttribute(Constants.USER_SESSION);
resp.sendRedirect("/login.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2、在web.xml中注册 退出登录servlet
<!--用户退出Servlet注册-->
<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.smbms.servlet.user.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/jsp/logout.do</url-pattern>
</servlet-mapping>
11、登录过滤器实现
1、编写登录过滤器
package com.smbms.filter;
import com.smbms.pojo.User;
import com.smbms.util.Constants;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SysFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
User user=(User) request.getSession().getAttribute(Constants.USER_SESSION);
if(user==null){
response.sendRedirect("/error.jsp");
}
else {
filterChain.doFilter(req,resp);
}
}
@Override
public void destroy() { }
}
2、在web.xml注册登录过滤器
<!--用户登录过滤器-->
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.smbms.filter.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>