Jsp&Servlet 用户登录功能实现

版权声明:No Rain No Rainbow https://blog.csdn.net/xiangyuenacha/article/details/82148316

简介:

登录功能的业务层(business layer)用servlet实现。

表现层(presentation layer)用Jsp实现。

1,数据库创建:

创建数据库为db_jsp,表为t_user(字段包含id,userName,password)
这里写图片描述

2、实体类(User实体类):

package com.lianxi.model;

public class User {

    private int id;
    private String userName;
    private String password;

    public User() {
        super();
    }

    public User(String userName, String password) {
        super();
        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;
    }


}

3、DBUtil封装工具类:

package com.lianxi.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbUtil {

    private String dbUrl="jdbc:mysql://localhost:3306/db_jsp";
    private  String user="root";
    private  String password="root";
    private String jdbcName="com.mysql.jdbc.Driver";
    public  Connection getCon() throws Exception{
        Class.forName(jdbcName);
        Connection conn = DriverManager.getConnection(dbUrl, user, password);
        return conn;
    }
    public void closeCon(Connection con) throws Exception{
        if(con!=null){
            con.close();
        }
    }
}

4、DAO层实现:

package com.lianxi.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.java1234.model.User;

public class UserDao {

    public User login(Connection con, User user) throws Exception {
        User resultUser=null;
        String sql="select * from t_user where userName=? and password=?";
        PreparedStatement psmt = con.prepareStatement(sql);
        psmt.setString(1, user.getUserName());
        psmt.setString(2, user.getPassword());
        ResultSet rs = psmt.executeQuery();
        while(rs.next()){
            resultUser = new User();
            resultUser.setUserName(rs.getString("userName"));
            resultUser.setPassword(rs.getString("password"));
        }
        return resultUser;

    }

}

5、Servlet实现:

package com.lianxi.web;

import java.io.IOException;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.java1234.dao.UserDao;
import com.java1234.model.User;
import com.java1234.util.DbUtil;

public class LoginServlet extends HttpServlet {

    UserDao userDao = new UserDao();
    DbUtil dbUtil=new DbUtil();

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String userName = req.getParameter("userName");
        String password = req.getParameter("password");

        System.out.println("用户名:"+userName+"密码:"+password);

        Connection con=null;

        User user = new User(userName,password);
         try {
            con = dbUtil.getCon();
            User currentUser=userDao.login(con,user);
            if(currentUser==null){
                req.setAttribute("error", "用户名或密码错误");
                req.setAttribute("userName", userName);
                req.setAttribute("password", password);
                req.getRequestDispatcher("login.jsp").forward(req, resp);//请求转发
            }else{

                HttpSession session =req.getSession();
                session.setAttribute("currentUser", currentUser);
                resp.sendRedirect("main.jsp");//请求重定向
            }
        } catch (Exception e) {
            e.printStackTrace();
        }



    }

}

servlet配置如下:

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.lianxi.web.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>

6、登录的Jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="login" method="post">
        <table>
            <tr>
                <th colspan="2">用户登陆</th>
            </tr>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="userName" value="${userName}"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password" value="${password}"></td>
            </tr>
            <tr>
                <td><input type="submit" value="登录"></td>
                <td><font style="color: red">${error }</font></td>
            </tr>
        </table>
    </form>

</body>
</html>

7、主页的Jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>主页</title>
</head>
<body>
当前登录用户:
${currentUser.userName }
</body>
</html>

业务实现过程:
访问login.jsp,将信息表单提交到loginservlet进行业务逻辑的处理,根据是否查到相关的用户。

查到用户,客户端跳转至主页,显示用户的相关信息。

未查到用户,服务器重定向至login.jsp并附带错误信息。

效果图如下:
错误情况下:
这里写图片描述
正确情况下:
这里写图片描述

到此功能完成

猜你喜欢

转载自blog.csdn.net/xiangyuenacha/article/details/82148316
今日推荐