接https://blog.csdn.net/dear_zx/article/details/111646814 最后的mvc示例:(学习记录)
代码结构:
user类(数据库自定义类)
package com.lagou.demo03.bean;
public class User {
private int id;
private String userName;
private String password;
public User() {
}
public User(String userName, String password) {
this.userName = userName;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
}
UserDao接口:(用户接口)
import com.lagou.demo03.bean.User;
public interface UserDao {
// 自定义抽象方法描述登录功能的实现
public abstract User userLogin(User user);
}
UserDaoImp类(继承用户接口实现登录查询)
package com.lagou.demo03.dao;
import com.lagou.demo03.bean.User;
import com.lagou.demo03.util.DbUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImp implements UserDao {
@Override
public User userLogin(User user) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 获取数据库连接
connection = DbUtil.getConnection();
// 准备sql语句
String sql = "select * from t_user where userName = ? and password = ?";
// 执行sql语句后获取结果并返回
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,user.getUserName());
preparedStatement.setString(2,user.getPassword());
resultSet = preparedStatement.executeQuery();
if (resultSet.next()){
User tu = new User(resultSet.getString("userName"),resultSet.getString("password"));
return tu;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放相关的资源
try {
DbUtil.closeResource(connection,preparedStatement);
if (null != resultSet){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
}
UserDaoFactory工厂类(返回UserDaoImp类,利用多态实现)
package com.lagou.demo03.factory;
import com.lagou.demo03.dao.UserDao;
import com.lagou.demo03.dao.UserDaoImp;
public class UserDaoFactory {
/**
* 通过静态工程方法模式来实现UserDao实现类的创建并返回
* @return
*/
public static UserDao getUserDao(){
return new UserDaoImp();
}
}
UserService类(用户服务类,获取到用户信息后进行登录查询)
package com.lagou.demo03.service;
import com.lagou.demo03.bean.User;
import com.lagou.demo03.dao.UserDao;
import com.lagou.demo03.factory.UserDaoFactory;
public class UserService {
private UserDao userDao;
public UserService(){
this.userDao = UserDaoFactory.getUserDao();
}
/**
* 自定义成员方法实现根据参数指定的User对象来调用DAO层实现登录功能
* @param user
* @return
*/
public User userLoginService(User user){
return userDao.userLogin(user);
}
}
LoginServlet类:(登录实现类)
package com.lagou.demo03.servlet;
import com.lagou.demo03.bean.User;
import com.lagou.demo03.service.UserService;
import javax.servlet.RequestDispatcher;
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;
@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求中的用户名和密码信息并打印出来
String userName = request.getParameter("userName");
System.out.println("获取到的用户名为:" + userName);
String password = request.getParameter("password");
System.out.println("获取到的密码为:" + password);
// 创建UserService类型的对象去实现数据的校验功能
UserService userService = new UserService();
User user = userService.userLoginService(new User(userName, password));
if (null == user){
System.out.println("登录失败。用户名或密码错误!");
request.setAttribute("error","登录失败,用户名或密码错误");
// 实现服务器跳转 共享request和response对象
RequestDispatcher requestDispatcher = request.getRequestDispatcher("login.jsp");
requestDispatcher.forward(request,response);
} else{
System.out.println("登录成功,欢迎使用");
// 将登录成功的用户信息放入session对象中实现多个请求共享
request.getSession().setAttribute("user",user);
// 实现客户端跳转
response.sendRedirect("main.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
Dbutil类:(连接数据库)
package com.lagou.demo03.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DbUtil {
private static String jdbcName; // 驱动信息
private static String dbUrl; // url信息
private static String dbUserName;// 用户名信息
private static String dbPassword;// 密码信息
// 进行成员的初始化操作
static {
jdbcName = "com.mysql.jdbc.Driver";
dbUrl = "jdbc:mysql://localhost:3306/db_web";
dbUserName = "root";
dbPassword = "123456";
try {
Class.forName(jdbcName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
return connection;
}
/**
* 关闭连接
* @param con
* @throws SQLException
*/
public static void closeResource(Connection con, PreparedStatement preparedStatement) throws SQLException {
if (null != con){
con.close();
}
if(null != preparedStatement){
preparedStatement.close();
}
}
}
login.jsp页面(登录页面)
<%@ page contentType="text/html; charset=utf-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>实现简单的登录功能</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="userName"><br>
密码:<input type="text" name="password"><br>
<span style="color: red"><%= request.getAttribute("error") == null?"":request.getAttribute("error")%></span>
<input type="submit" value="登录">
</form>
</body>
</html>
main.jsp页面(登录成功后跳转的页面)
<%@ page import="com.lagou.demo03.bean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页面</title>
</head>
<body>
<h1>登录成功,欢迎<%= ((User)session.getAttribute("user")).getUserName()%>使用!</h1>
</body>
</html>