利用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,然后点击应用,确定。下面是我们的运行结果:
点击退出之后回到登录页面
登录失败: