这篇博客存放很久了,才看到一直在草稿箱里,再整理一下发出来。
结合哔哩哔哩教学视频,实际写了一遍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文件夹 再把驱动放进去才没有报错了!!!
三、实现