實驗十一 Servlet(二)
【實驗目的】
1.了解Servlet運行原理
2.掌握Servlet實現方式
【實驗內容】
改造實驗10,引入數據庫,創建用戶表,包括用戶名和密碼:客戶端通過login.jsp發出登錄請求,請求提交到loginServlet處理。如果用戶名和密碼跟用戶表匹配則視為登錄成功,跳轉到loginSuccess.jsp頁面,顯示“歡迎你”+用戶名;否則跳轉到loginFail.jsp頁面,顯示“登錄失敗”,通過超鏈接返回login.jsp。
說明:把用戶名和密碼跟用戶表匹配的功能放到loginServlet并實現相應請求轉發或跳轉即可。可以暫時不考慮創建其它java類。
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="loginServlet" method="post"><label for="username">用戶名:</label><input type="text" id="username" name="username" required><br><label for="password">密碼:</label><input type="password" id="password" name="password" required><input type="submit" value="登陸">
</form>
</body>
</html>
loginServlet
package servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;import java.io.*;
import java.sql.*;
//使用@WebServlet注解
@WebServlet(name = "loginServlet" )
public class loginServlet extends HttpServlet {private static final String url = "jdbc:mysql://localhost:3306/test9";protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//從請求中獲取用戶名(stuId)和密碼(stuPwd)String stuId = request.getParameter("username");String stuPwd = request.getParameter("password");try {// 加載和注冊JDBC驅動Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection(url, "root", "123456");String sql = "select * from password where stuId = ? and stuPwd = ?";//創建PreparedStatement對象,這有助于防止SQL注入攻擊PreparedStatement stmt = conn.prepareStatement(sql);//使用setString方法設置SQL查詢中的參數值stmt.setString(1,stuId);stmt.setString(2,stuPwd);ResultSet rs = stmt.executeQuery();if (rs.next()) {//從結果集中獲取用戶名String stuname = rs.getString("stuId");//將用戶名保存到會話中HttpSession session = request.getSession();session.setAttribute("username",stuname);//重定向到loginSuccess.jsp頁面response.sendRedirect("loginSuccess.jsp");} else {//重定向到loginFail.jsp頁面response.sendRedirect("loginFail.jsp");}rs.close();stmt.close();conn.close();} catch (SQLException se) {se.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}
loginSuccess.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登陸成功</title>
</head>
<body><h4>歡迎你,${sessionScope.username}</h4>
</body>
</html>
loginFail.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登陸失敗</title>
</head>
<body><h4>登錄失敗</h4><a href="login.jsp">返回登陸頁面</a>
</body>
</html>
結果:
登錄成功:
登錄失敗:
[實驗心得]
通過本次Servlet實驗,理解了Servlet的運行原理。