利用servlet,jsp实现用户的登录,并且登录后显示用户名(连接数据库)

显示用户名这里是通过session传递数据,登陆成功后点击退出时要清除页面session。
使用软件:tomcat-8.5.34,mysql,java
我们一共需要写:

  • 位于src下的服务器端用于登录的LoginServlet,登陆成功后用于退出的SuccessServlet
  • 位于web下的前端登录页面login.html,登陆成功后的页面success.jsp,登录失败的页面error.html;
首先我们来写登录的服务器端LoginServlet
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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

@WebServlet(urlPatterns = "/loginServlet")//此处为标记,让前端代码执行的时候走这个服务器
public class loginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            System.out.println("进入方法");
            //获取页面请求的参数
            String name = req.getParameter("uname");
            String password = req.getParameter("upass");
            //获取数据库的连接(连接数据库)
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/(这里写具体连接那个数据库,不带括号,直接写库名)?serverTimezone=UTC";
            String username = "这里写数据库的用户名";
            String passwd = "这里写数据库的密码";
            Connection con = DriverManager.getConnection(url, username, passwd);
            String sql = "select * from users";
            Statement sta = con.createStatement();
            ResultSet res = sta.executeQuery(sql);
            int t = 0;//登陆成功
            //数据库里记得要提前存好用户名和密码,否则无法登陆!
            while (res.next()) {
                //获取数据库表中每一列的值
                String user1 = res.getString("username");
                String pass1 = res.getString("password");
                if (name.equals(user1) && password.equals(pass1)) {
                    t = 1;
                    break;
                } else {
                    t = 0;
                }
            }
            if (t == 1) {
                HttpSession session=null;//清除页面滞留的session,这样点击退出以后,下次登录确保重新获取新的用户名
                session = req.getSession();//获取session
                session.setAttribute("uname",name);//将用户名传递给session
                req.getRequestDispatcher("/success.jsp").forward(req, resp);//request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的。这里能够实现页面的跳转
            } else if (t == 0) {
                req.getRequestDispatcher("/error.html").forward(req, resp);//跳转到登录失败的界面
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

下面是登陆成功后用于退出的SuccessServlet,点击退出按钮回到登录页面

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(urlPatterns = "/SuccessServlet")
public class SuccessServlet 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 {
        try {
                req.getRequestDispatcher("/login.html").forward(req, resp);
                HttpSession session=null;
                session = req.getSession();
                session.removeAttribute("uname");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接下来我们来写登录的页面login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<h1>登录</h1>

<form action="loginServlet" method="post">
    username:<input type="text" name="uname"><br>
    password:<input type="password" name="upass"><br>
    <input type="submit" value="登录"/>
</form>
</body>
</html>
最后我们来写登录候的页面success.jsp及error.html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
    <script>
        function jump(){
            window.location.href="/SuccessServlet";
        }
    </script>
</head>
<body>
<h1>欢迎你,${ sessionScope.uname}</h1>
<button onclick=javascript:jump()>退出</button>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
<h1>登录失败!!!!</h1>
</body>
</html>

到这里代码的部分就完成了,在部署Tomcat的时候,有一个index.jsp,这是Tomcat运行的首页,我们可以将login.html作为超链接写在index.jsp中,也可以将login.html的内容全部写在index.jsp中,就不需要login.html了,下面讲解怎么部署Tomcat:

首先点击idea右上角的edit configurations…
在这里插入图片描述
之后我们点击加号
在这里插入图片描述
向下翻,找到Tomcat server—local在这里插入图片描述
选择好安装路径后,点击fix,然后点击应用,确定。

下面是我们的运行结果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击退出之后回到登录页面
登录失败:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐