3. 编写Dao层接口
package com.java.dao; import com.java.domain.User; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 14:32 * @Description 用户dao层接口 */ public interface UserDao { // 登录 User login(String username, String password); // 注册 Boolean register(User user); }
4. 编写数据库连接工具类
package com.java.utils; import java.sql.*; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 12:40 * @Description 数据库连接工具类 */ public class JdbcUtil { /** * 1、获取Connection * @return Connection * @throws Exception */ public static Connection getConnection() throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaweb","root", "123456"); return connection; } /** * 2、释放资源 * @param resultSet * @param statement * @param connection */ public static void release(ResultSet resultSet, Statement statement, Connection connection) { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } // public static void main(String[] args) throws Exception { // Connection connection = JdbcUtil.getConnection(); // System.out.println(connection); // } }
5. 编写Dao层接口实现类
package com.java.dao.impl; import com.java.dao.UserDao; import com.java.domain.User; import com.java.utils.JdbcUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 14:32 * @Description 用户dao层实现类 */ public class UserDaoImpl implements UserDao { /** * 登录 * @param username 用户名 * @param password 密码 * @return 用户对象 */ public User login(String username, String password) { User user = null; Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = JdbcUtil.getConnection(); String sql = "select * from user where username = ? and password= ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, username); preparedStatement.setString(2, password); resultSet = preparedStatement.executeQuery(); if(resultSet.next()){ user = new User(); user.setId(resultSet.getInt("id")); user.setUsername(resultSet.getString("username")); user.setPassword(resultSet.getString("password")); user.setRole(resultSet.getInt("role")); System.out.println("登录成功" + user.toString()); } else { System.out.println("用户名或者密码错误"); } } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.release(resultSet, preparedStatement, connection); } return user; } /** * 注册 * @param user 用户对象 */ public Boolean register(User user){ Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; int result = 0; try { connection = JdbcUtil.getConnection(); String sql = "insert into user(username, password) values (?, ?);"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, user.getUsername()); preparedStatement.setString(2, user.getPassword()); result = preparedStatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.release(resultSet, preparedStatement, connection); } // 三目表达式,result等1则人会true,否则返回false return result == 1 ? true:false; } }
6. 修改web.xml文件
(1)设置欢迎首页
<!--设置启动首页为login.jsp--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>
(2)设置登陆和注册Servlet
<!--设置servlet--> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>com.java.servlet.LoginServlet</servlet-class> </servlet> <!--设置servlet的url--> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <!--设置servlet--> <servlet> <servlet-name>registerServlet</servlet-name> <servlet-class>com.java.servlet.RegisterServlet</servlet-class> </servlet> <!--设置servlet的url--> <servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/register</url-pattern> </servlet-mapping>
7. 编写LoginServlet代码
package com.java.servlet; import com.java.dao.UserDao; import com.java.dao.impl.UserDaoImpl; import com.java.domain.User; 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 java.io.IOException; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 12:40 * @Description 登录Servlet */ @WebServlet(name = "/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); // 获取前端页面传过来的值 String username = req.getParameter("username"); String password = req.getParameter("password"); String role = req.getParameter("role"); // 执行查询数据库逻辑 UserDao userDao = new UserDaoImpl(); User user = userDao.login(username, password); // 如果根据用户名和密码能查得到值 if (user != null) { int roleDb = user.getRole(); // 权限的选择跟数据库不匹配时,且不是管理员用户时,返回无权限 if (roleDb != Integer.parseInt(role) && roleDb != 0) { req.setAttribute("message", "无权限登录"); req.getRequestDispatcher("/defeat.jsp").forward(req,resp); } else { req.setAttribute("user", user); req.getRequestDispatcher("/success.jsp").forward(req,resp); } } else { // 用户名或者密码错误执行以下代码 req.setAttribute("message", "用户名或者密码错误"); req.getRequestDispatcher("/defeat.jsp").forward(req,resp); } } }