1.Bean层(Model层)
- 脚色:就像餐厅里的“菜品”。
- 功能:是纯数据对象(如Person类),封装属性和 getter/setter(比方用户名、密码)。
- 示例:Person类
- package com.bean;
- public class Person {
- private int id;
- private String name;
- private String pwd;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPwd() {
- return pwd;
- }
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- }
复制代码 2.Dao层(Data Access Object)
- 脚色:后厨的“厨师”,专注做菜(操纵数据)。
- 功能:直接和数据库对话,实行增编削查(CRUD)。
- 示例:UserDAO 类中的 saveUser(User user) 方法,负责把用户数据存入数据库。
接口
- package com.dao;
- import com.bean.Person;
- import java.sql.SQLException;
- import java.util.List;
- public interface PersonDao {
- public List<Person> queryAll() throws SQLException;
- public Boolean selectOne(Person person) throws SQLException;
- public int save(Person person) throws SQLException;
- }
复制代码 实现接口
- package com.dao.impl;
- import com.bean.Person;
- import com.dao.PersonDao;
- import com.db.DB;
- import java.sql.*;
- import java.util.ArrayList;
- import java.util.List;
- public class PersonDaoImpl implements PersonDao {
- // ------------------------- 方法1:查询所有用户 -------------------------
- @Override
- public List<Person> queryAll() throws SQLException {
- Connection connection=new DB().getConnection(); //获取数据库连接
- Statement statement= connection.createStatement(); //创建SQL执行器
- ResultSet resultSet= statement.executeQuery("select * from person"); //执行查询SQL语句
- List list=new ArrayList(); //准备空集合装数据
- while (resultSet.next()){ //遍历查询结果(一行一行读)
- Person p=new Person(); //新建数据盒子
- p.setId(resultSet.getInt(1)); //取第一列(id)放入盒子
- p.setName(resultSet.getString(2)); //取第二列(name)放入
- p.setPwd(resultSet.getString(3)); //取第三列(pwd)放入
- list.add(p); //把盒子加入集合
- }
- resultSet.close();
- statement.close();
- connection.close();
- return list;
- }
- // ------------------------- 方法2:检查用户名是否存在 -------------------------
- @Override
- public Boolean selectOne(Person person) throws SQLException {
- //Connection connection=new DB().getConnection(); getConnection()为静态方法就可以之间如下:
- Connection connection= DB.getConnection(); //获取一个数据库连接
- PreparedStatement statement= connection.prepareStatement("select * from person where name=?");
- statement.setString(1,person.getName()); //设置参数(替换第一个问号)
- ResultSet resultSet= statement.executeQuery(); //执行查询
- if (resultSet.next()){
- return false;
- }else {
- return true;
- }
- }
- // ------------------------- 方法3:保存用户 -------------------------
- @Override
- public int save(Person person) throws SQLException {
- Connection connection= DB.getConnection();
- // 预编译SQL(提高性能,防止注入)
- PreparedStatement statement= connection.prepareStatement("insert into person(name,pwd) values(?,?)");
- statement.setString(1,person.getName()); //设置第一个参数(name)
- statement.setString(2,person.getPwd()); //设置第二个参数(pwd)
- int i= statement.executeUpdate(); //执行插入操作
- statement.close();
- connection.close();
- return i; //返回影响的行数(1=成功,0=失败)
- }
- }
复制代码 3.DB(驱动连接数据库)
- 脚色:餐厅的“仓库”,存储所有食材。
- 功能:持久化生存数据(如 MySQL、PostgreSQL)
- package com.db;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- public class DB {
- public static Connection getConnection(){
- Connection connection=null;
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return connection;
- }
- }
复制代码 4.Service层
- 脚色:餐厅的“经理”,和谐复杂流程。
- 功能:处理业务逻辑(比方注册时检查用户名是否重复 + 加密密码)。
- 示例:UserService 的 registerUser() 方法会调用 DAO 的多个操纵,并处理事件。
接口
- package com.service;
- import com.bean.Person;
- import java.sql.SQLException;
- import java.util.List;
- public interface PersonSercie {
- public List<Person> AllPerson() throws SQLException;
- public boolean register(Person person) throws SQLException;
- }
复制代码 实现接口
- package com.service.impl;
- import com.bean.Person;
- import com.dao.PersonDao;
- import com.dao.impl.PersonDaoImpl;
- import com.service.PersonSercie;
- import java.sql.SQLException;
- import java.util.List;
- public class PersonServiceImpl implements PersonSercie {
- @Override
- public List<Person> AllPerson() throws SQLException {
- PersonDao dao=new PersonDaoImpl(); // 1. 创建DAO对象,准备访问数据库
- return dao.queryAll(); // 2. 调用DAO查询所有用户
- }
- @Override
- public boolean register(Person person) throws SQLException {
- PersonDao dao=new PersonDaoImpl();
- //检查用户名是否已存在
- if(dao.selectOne(person)){ //调用DAO查询是否存在同名用户
- dao.save(person); //无重复 → 保存用户
- return true; //返回注册成功
- }else {
- return false; //返回注册失败
- }
- }
- }
复制代码 5.Servlet(Controller层)
- 脚色:餐厅的“服务员”,欢迎客人并传递需求。
- 功能:接收 HTTP 请求(如 POST /login),调用 Service 处理,返反响应(跳转页面或 JSON)。
- 示例:LoginServlet 获取表单参数,交给 UserService 验证登录。
删除
- package com.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;
- import java.sql.*;
- @WebServlet(name = "DeleteServlet",urlPatterns = "/del")
- public class DeleteServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String id=request.getParameter("id");
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");
- //Statement statement= connection.createStatement();
- PreparedStatement statement= connection.prepareStatement("delete from person where id=?");
- statement.setInt(1,Integer.parseInt(id));
- int i=statement.executeUpdate();
- if(i>0){
- response.sendRedirect("listall");
- }else {
- response.getWriter().println("Error");
- }
- statement.close();
- connection.close();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
复制代码 查看
- package com.servlet;
- import com.bean.Person;
- import com.service.PersonSercie;
- import com.service.impl.PersonServiceImpl;
- 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;
- import java.sql.*;
- import java.util.List;
- @WebServlet(name = "ListAllServlet",urlPatterns = "/listall")
- public class ListAllServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- PersonSercie personSercie=new PersonServiceImpl();
- try {
- List<Person> list=personSercie.AllPerson();
- request.setAttribute("persons",list);
- request.getRequestDispatcher("listall.jsp").forward(request,response);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
复制代码 增加
- package com.servlet;
- import com.bean.Person;
- import com.service.PersonSercie;
- import com.service.impl.PersonServiceImpl;
- 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;
- import java.sql.SQLException;
- @WebServlet(name = "RegServlet",urlPatterns = "/reg")
- public class RegServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String name=request.getParameter("uname");
- String pwd=request.getParameter("upwd");
- Person person=new Person();
- person.setName(name);
- person.setPwd(pwd);
- //调用模型中注册业务逻辑实现
- PersonSercie personSercie = new PersonServiceImpl(); // 创建服务层对象(业务逻辑处理者)
- try {
- if(personSercie.register(person)){ // 调用服务层的注册方法
- response.sendRedirect("login.jsp"); // 注册成功:跳转到登录页
- }else {
- response.sendRedirect("reg.jsp");// 注册失败:返回注册页
- };
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- }
复制代码 改1
- package com.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;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- @WebServlet(name = "UpdateDoServlet",urlPatterns = "/updateDo")
- public class UpdateDoServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String id=request.getParameter("id");
- String name=request.getParameter("username");
- String pwd=request.getParameter("userpwd");
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");
- //Statement statement= connection.createStatement();
- PreparedStatement statement= connection.prepareStatement("update person set name=?,pwd=? where id=?");
- statement.setString(1,name);
- statement.setString(2,pwd);
- statement.setInt(3,Integer.parseInt(id));
- int i=statement.executeUpdate();
- if(i>0){
- response.sendRedirect("listall");
- }else {
- response.getWriter().println("Error");
- }
- statement.close();
- connection.close();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- }
复制代码 改2
- package com.servlet;
- import com.bean.Person;
- 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;
- import java.sql.*;
- @WebServlet(name = "UpdateServlet",urlPatterns = "/update")
- public class UpdateServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String id=request.getParameter("id");
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");
- PreparedStatement statement= connection.prepareStatement("select * from person where id=?");
- statement.setInt(1,Integer.parseInt(id));
- ResultSet resultSet=statement.executeQuery();
- Person p=new Person();
- if (resultSet.next()){
- p.setId(resultSet.getInt(1));
- p.setName(resultSet.getString(2));
- p.setPwd(resultSet.getString(3));
- }
- request.setAttribute("user",p);
- resultSet.close();
- statement.close();
- connection.close();
- request.getRequestDispatcher("update.jsp").forward(request,response);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
复制代码 总结
大概流程:就像网购流程:JSP→ 你下单(Servlet收件)→ 调度中心检查(Service处理)→ 仓库存取(DAO操纵→仓库DB)→ 终极收到包裹(响应结果)
|