表示层:MVC中的视图层和控制器层,前端通常为html css js jsp文件,后端例如Servlet文件,调用业务逻辑层业务逻辑层(Service):接受表示层的请求,先进行逻辑处理,后调用数据逻辑层,(增:查+增)
数据访问层(Dao):直接访问数据库的操作
通过三层架构,将表示层请求传递到数据访问层,数据访问层将结果返回至表示层
具体流程
开发环境:IDEA Mysql 8.0.19 mysql driver:8.0.15 servlet:3.0以上版本
代码结构(正规来说的话service 和 dao 需要接口,为了代码看着方便省略了)
add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>add</title> </head> <body> <form action="addStudentServlet" > 学号:<input type="number" name="sno"><br/> name: <input type="text" name="sname"/><br/> age: <input type="text" name="sage"/><br/> address: <input type="text" name="saddress"/><br/> <input type="submit" value="add"/><br/> </form> </body> </html>
写后端代码前,先将数据封装Java bean(entity包中)
package com.Student.entity; public class Student { private int sno; private String sname; private int sage; private String saddress; public Student(int sno, String sname, int sage, String saddress) { this.sno = sno; this.sname = sname; this.sage = sage; this.saddress = saddress; } public Student(String sname, int sage, String saddress) { this.sname = sname; this.sage = sage; this.saddress = saddress; } @Override public String toString() { return "Student{" + "sno=" + sno + ", sname='" + sname + '\'' + ", sage=" + sage + ", saddress='" + saddress + '\'' + '}'; } public int getSno() { return sno; } public void setSno(int sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public int getSage() { return sage; } public void setSage(int sage) { this.sage = sage; } public String getSaddress() { return saddress; } public void setSaddress(String saddress) { this.saddress = saddress; } }
addStudentServlet.java(com.student.servlet包中)
package com.Student.Servlet; import com.Student.entity.Student; import com.Student.service.StudentService; 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.io.PrintWriter; @WebServlet("/addStudentServlet") public class addStudentServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setCharacterEncoding("utf-8"); // 指定输出到客户端的是编码格式 response.setContentType("text/html;charset=UTF-8"); // 指定浏览器解析数据的时候,使用的编码格式 int no = Integer.parseInt(request.getParameter("sno")); String name = request.getParameter("sname"); int age = Integer.parseInt(request.getParameter("sage")); String address = request.getParameter("saddress"); Student student = new Student(no, name, age, address); StudentService studentService = new StudentService(); boolean result = studentService.addStudent(student); PrintWriter out = response.getWriter(); if(result){ out.println("add successfully"); }else{ out.println("fail to add"); } /*if (!result) { //如果增加失败,给request放入一条数据error request.setAttribute("error", "error"); } request.getRequestDispatcher("queryAllStudentServlet").forward(request, response);*/ } }
addStudentService.java(自行匹配放包中)
package com.Student.service; import com.Student.Dao.StudentDao; import com.Student.entity.Student; import java.util.List; //业务逻辑层:逻辑性的增删改查(增:查+增), 对Dao层进行组装 public class StudentService { StudentDao studentDao = new StudentDao(); public boolean addStudent(Student student){ if(!studentDao.isExist(student.getSno())){ //此人不存在 studentDao.addStudent(student); return true; }else{ System.out.println("此人已存在"); return false; } } public boolean deleteStudent(int sno){ if(studentDao.isExist(sno)){ return studentDao.deleteStudentBySno(sno); }else{ return false; } } public boolean updateStudentBySno(int sno,Student student){ if(studentDao.isExist(sno)){ return studentDao.updateStudentBySno(sno, student); }else{ return false; } } //根据学号查询一个学生 public Student queryStudentBySno(int sno){ return studentDao.queryStudentBySno(sno); } public List<Student> queryAllStudent(){ return studentDao.queryAllStudent(); } }
StudentDao.java
package com.Student.Dao; import com.Student.entity.Student; import java.sql.*; import java.util.ArrayList; import java.util.List; //数据访问层,原子性的增删改查,不可拆, public class StudentDao { private final String url = "jdbc:mysql://localhost/Student"; private final String User = "root"; private final String pwd = "123456"; public boolean isExist(int sno) { //true :此人存在 false : 此人不存在 return queryStudentBySno(sno)==null? false:true; } public boolean addStudent(Student student){ Connection connection = null; PreparedStatement pstmt = null; try{ Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(url, User, pwd); System.out.println("The database was connected successfully"); String sql = "insert into student values(?,?,?,?)"; pstmt = connection.prepareStatement(sql); pstmt.setInt(1,student.getSno()); pstmt.setString(2,student.getSname()); pstmt.setInt(3,student.getSage()); pstmt.setString(4,student.getSaddress()); int count = pstmt.executeUpdate(); System.out.println("count = "+count); if(count>0){ return true; } else return false; }catch (ClassNotFoundException e){ e.printStackTrace(); return false; }catch (SQLException e){ e.printStackTrace(); return false; } catch (Exception e){ e.printStackTrace(); return false; }finally { try{ if(pstmt!=null)pstmt.close(); if(connection!=null)connection.close(); }catch (SQLException e){ e.printStackTrace(); } } } }
125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/9551.html