1. 程式人生 > >基於servlet的web表單登入註冊頁面

基於servlet的web表單登入註冊頁面

這篇部落格存放很久了,才看到一直在草稿箱裡,再整理一下發出來。

結合嗶哩嗶哩教學視訊,實際寫了一遍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資料夾  再把驅動放進去才沒有報錯了!!!

三、實現