基於servlet的web表單登入註冊頁面
阿新 • • 發佈:2018-11-12
這篇部落格存放很久了,才看到一直在草稿箱裡,再整理一下發出來。
結合嗶哩嗶哩教學視訊,實際寫了一遍web的簡單專案。
一、專案結構圖
二、程式碼片段
1.建立實體類
程式碼如下:
package com.liumce.bean; import java.io.Serializable; public class Student implements Serializable { private Integer id; // id 使用業務無關主鍵 private String num; // 學號 private String password; //登入密碼 private String name; private int age; private double score; public Student(){} public Student(String num, String name, int age, double score) { this.num = num; this.name = name; this.age = age; this.score = score; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } }
2.編寫介面
package com.liumce.dao;
import com.liumce.bean.Student;
public interface IStudentDao {
Student selectStudentLogin(String num, String password);
Integer insertStudent(Student student);
}
3.實現介面
package com.liumce.dao; import com.liumce.bean.Student; import com.liumce.util.JdbcUtils; import java.sql.*; public class StudentDaoImpl implements IStudentDao { private Connection conn; private Statement stmt; private PreparedStatement ps; private ResultSet rs; @Override public Student selectStudentLogin(String num, String password) { Student student = null; try { conn = JdbcUtils.getConnection(); String sql = "select * from student where num=? and password=?"; ps = conn.prepareStatement(sql); ps.setString(1,num); ps.setString(2,password); rs=ps.executeQuery(); if (rs.next()){ student = new Student(); student.setId(rs.getInt("id")); student.setNum(rs.getString("num")); student.setPassword(rs.getString("password")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setScore(rs.getDouble("score")); } } catch (SQLException e) { e.printStackTrace(); }finally { try { JdbcUtils.close(conn , ps,rs); } catch (SQLException e) { e.printStackTrace(); } } return student; } @Override public Integer insertStudent(Student student) { Integer id = null; try { conn = JdbcUtils.getConnection(); String sql = "insert into student(num,password,name,age,score) values(?,?,?,?,?)"; ps = conn.prepareStatement(sql); ps.setString(1, student.getNum()); ps.setString(2, student.getPassword()); ps.setString(3, student.getName()); ps.setInt(4, student.getAge()); ps.setDouble(5, student.getScore()); ps.executeUpdate(); sql = "SELECT @@IDENTITY newId"; // sql = "SELECT last_insert_id() newId"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); if (rs.next()){ id = rs.getInt("newId"); } } catch (SQLException e) { e.printStackTrace(); }finally { try { JdbcUtils.close(conn, ps, rs); } catch (SQLException e) { e.printStackTrace(); } } return id; } }
結果如圖:
4.編寫學生service介面
package com.liumce.service;
import com.liumce.bean.Student;
public interface IStudentService {
//對使用者進行驗證
Student cheakUser(String num, String password);
// 向DB中新增Student
Integer saveStudent(Student student);
}
5.
package com.liumce.service; import com.liumce.bean.Student; import com.liumce.dao.IStudentDao; import com.liumce.dao.StudentDaoImpl; public class StudentServiceImpl implements IStudentService { private IStudentDao dao; public StudentServiceImpl() { dao = new StudentDaoImpl(); } @Override public Student cheakUser(String num, String password) { return dao.selectStudentLogin(num, password); } @Override public Integer saveStudent(Student student) { return dao.insertStudent(student); } }
效果如圖:
6.新建登入註冊servlet
程式碼如下:
package com.liumce.servlet;
import com.liumce.bean.Student;
import com.liumce.service.IStudentService;
import com.liumce.service.StudentServiceImpl;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//@WebServlet(name="LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, IOException {
//1、 接收請求引數
String num = request.getParameter("num");
String password = request.getParameter("password");
//獲取session
HttpSession session = request.getSession();
//防止使用者從位址列訪問 + 防止使用者沒輸內容
if (num == null || "".equals(num.trim())) {
// request.getRequestDispatcher("/login.jsp");
session.setAttribute("message","學號輸入有誤");
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;
}
if (password == null || "".equals(num.trim())) {
session.setAttribute("message","密碼輸入有誤");
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;
}
//2、 建立Service物件
IStudentService service = new StudentServiceImpl();
//3、 呼叫Service物件的checkUser()方法對使用者進行驗證
Student student = service.cheakUser(num, password);
//4、 驗證未通過則跳轉到登入頁面,讓使用者再次輸入登入資訊。此時需要給使用者提示一些資訊
if (student == null) {
session.setAttribute("message","使用者名稱驗證未通過");
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;
}
//5、 驗證通過則跳轉到系統主頁面index.jsp,
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
}
package com.liumce.servlet;
import com.liumce.bean.Student;
import com.liumce.service.IStudentService;
import com.liumce.service.StudentServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//@WebServlet(name="registerServlet")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 1、獲取表單引數
String num = request.getParameter("num");
String password = request.getParameter("password");
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
String scoreStr = request.getParameter("score");
//驗證
// if (num == null || "".equals(num.trim())) {
// response.sendRedirect(request.getContextPath()+"/login.jsp");
// return;
// }
Integer age = Integer.valueOf(ageStr);
Double score = Double.valueOf(scoreStr);
// 2、建立Student物件
Student student = new Student(num, name, age, score);
student.setPassword(password);
// 3、建立Service物件
IStudentService service = new StudentServiceImpl();
// 4、呼叫Service物件的saveStudent()方法將物件寫入到DB
Integer id = service.saveStudent(student);
// 5、寫入失敗,跳轉到註冊頁面,重新註冊
if (id == null) {
response.sendRedirect(request.getContextPath() + "/register.jsp");
return;
}
// 6、寫入成功。剛跳轉到登入頁面
response.sendRedirect(request.getContextPath() + "/login.jsp");
}
}
package com.liumce.servlet;
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 = "toRegisterServlet")
public class ToRegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendRedirect(request.getContextPath() + "/register.jsp");
}
}
6.新建jdbc連線工具類
package com.liumce.util;
import java.sql.*;
public class JdbcUtils {
//載入db驅動
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static Connection conn = null;
//獲取Connection物件
public static Connection getConnection() throws SQLException {
String url = "jdbc:mysql://127.0.0.1:3306/test_web";
String user = "root";
String password = "1";
if (conn == null || conn.isClosed()) {
conn = DriverManager.getConnection(url, user, password);
}
return conn;
}
//關閉資源
public static void close(Connection conn, Statement stmt, ResultSet rs) throws SQLException {
if (conn != null && !conn.isClosed()) {
conn.close();
}
if (stmt != null && !stmt.isClosed()) {
stmt.close();
}
if (rs != null && !rs.isClosed()) {
rs.close();
}
}
}
7.web.xml檔案的註冊
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.liumce.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.liumce.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ToRegisterServlet</servlet-name>
<servlet-class>com.liumce.servlet.ToRegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ToRegisterServlet</servlet-name>
<url-pattern>/ToRegisterServlet</url-pattern>
</servlet-mapping>
</web-app>
參考這個:http://blog.csdn.net/mytt_10566/article/details/70173007
http://blog.csdn.net/yanglun1/article/details/46440691
二、報錯解決
一直解決的問題:
可是我明明有jar的驅動包啊。。。。
最後才發現IDEA自己就有一個:
所以又在WEB_INF下面新建了一個lib資料夾 再把驅動放進去才沒有報錯了!!!
三、實現