[原创]java WEB学习笔记19:初识MVC 设计模式:查询,删除 练习(理解思想),小结 ,问题

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.在上一学习笔记中,了解了MVC设计的思想,这一学习笔记,主要手动写一个MVC的查询程序,比较糙,重理解思想

2.需求:通过index.jsp 页面发过请求,查询学生的信息,将学生的信息输出到des.jsp页面上;可以删除学生的信息。

3.代码结构

  1)index.jsp  : 一个查询的超链接页面;

  2)des.jps     :  显示查询的页面;

  3)success.jsp :删除成功后跳转的页面

  4)ListAllStudentsServlet.java : 负责处理index 页面请求的servlet,同时与dao交互;

  5)DeletStudentServlet.java   :通过传入的flowId 进行删除;

  6)StudentDao.java : 定义方法getA() 用于与数据库交互,查询数据 ,返回结果;deleteByFlowId(int flowId)方法,按照flowId删除相应的学生信息;

  7)Student.java  :bean  同数据库表的字段一致,get set方法,带参,不带餐构造器,用于检查的 toString 方法;

4.具体代码

  1)index.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>index</title>
 8 </head>
 9 <body>
10     <a href="listAllStudents">List All Students</a>
11 
12 </body>
13 </html>

   

  2)des.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ page import="java.util.List"%>
 4 <%@ page import="com.jason.testMVC.Student"%>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 9 <title>des</title>
10 </head>
11 <body>
12     <%
13         List<Student> stus = (List<Student>) request
14                 .getAttribute("students");
15 
16         if (stus == null) {
17             System.out.println("stus is null");
18         } else {
19     %>
20     <table border="1" cellpadding="10" cellspacing="0">
21         <tr>
22             <th>FlowId</th>
23             <th>Type</th>
24             <th>IdCard</th>
25             <th>ExamCard</th>
26             <th>StudentName</th>
27             <th>Location</th>
28             <th>Grade</th>
29             <th>Delete</th>
30         </tr>
31         <%
32             for (Student stu : stus) {
33         %>
34         <tr>
35             <td><%=stu.getExamCard()%></td>
36             <td><%=stu.getType()%></td>
37             <td><%=stu.getIdCard()%></td>
38             <td><%=stu.getExamCard()%></td>
39             <td><%=stu.getStudentName()%></td>
40             <td><%=stu.getLocation()%></td>
41             <td><%=stu.getGrade()%></td>
42             <td><a href="deletStudent?flowId=<%=stu.getFlowId() %>"/>Delete</td>   //通过这个种方式,向servlet传入flowId参数
43         </tr>
44         <%    
45                 }
46             }
47         %>
48     </table>
49 
50 </body>
51 </html>

  3)success.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     
11     
12     <h1>删除成功</h1>
13     <a href="listAllStudents">List All Students</a>
14     
15     
16 </body>
17 </html>

  4)ListAllStudentsServlet.java

 1 package com.jason.testMVC;
 2 
 3 import java.io.IOException;
 4 import java.util.List;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 /**
13  * Servlet implementation class ListAllStudentsServlet
14  */
15 @WebServlet("/listAllStudents")
16 public class ListAllStudentsServlet extends HttpServlet {
17     private static final long serialVersionUID = 1L;
18 
19     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20     
21             StudentDao studentDao = new StudentDao();
22             List<Student>  students = studentDao.getAll();
23             
24             request.setAttribute("students", students);
25         
26             request.getRequestDispatcher("/students.jsp").forward(request, response);
27     }
28 
29 }

   

  5)DeletStudentServlet.java 

 1 package com.jason.testMVC;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;
12 
13 /**
14  * Servlet implementation class DeletStudentServlet
15  */
16 
17 
18 @WebServlet("/deletStudent")
19 public class DeletStudentServlet extends HttpServlet {
20     private static final long serialVersionUID = 1L;
21        
22     
23     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
24         
25         String flowIdStr =   request.getParameter("flowId");
26 //    int flowId = Integer.parseInt(flowIdStr);
27 //        System.out.println(flowIdStr);
28         
29         StudentDao  studentDao = new StudentDao();
30         boolean flage = studentDao.deleteByFlowId(Integer.parseInt(flowIdStr));
31         
32         if(flage){
33             request.getRequestDispatcher("/success.jsp").forward(request, response);
34         }else{
35             System.out.println("删除失败");
36         }
37         
38         
39     }
40 
41     
42 
43 }

  6)StudentDao.java

  1 package com.jason.testMVC;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 
 11 public class StudentDao {
 12         
 13     
 14     public List<Student> getAll() {
 15 
 16         List<Student> students = new ArrayList<Student>();
 17         Connection connection = null;
 18         PreparedStatement preparedStatement = null;
 19         ResultSet resultSet = null;
 20 
 21         try {
 22 
 23             String driverClass = "com.mysql.jdbc.Driver";
 24             String url = "jdbc:mysql://127.0.0.1:3306/atguigu";
 25             String user = "root";
 26             String password = "zhangzhen";
 27             // 加载驱动类
 28             Class.forName(driverClass);
 29             connection = DriverManager.getConnection(url, user, password);
 30             
 31             String sql = "SELECT *  FROM student";
 32             
 33             preparedStatement = connection.prepareStatement(sql);
 34             resultSet = preparedStatement.executeQuery();
 35 
 36             while (resultSet.next()) {
 37                 int FlowId = resultSet.getInt(1);
 38                 int type = resultSet.getInt(2);
 39                 String idCard = resultSet.getString(3);
 40                 String examCard = resultSet.getString(4);
 41                 String studentName = resultSet.getString(5);
 42                 String locatoin = resultSet.getString(6);
 43                 int grade = resultSet.getInt(7);
 44 
 45                 Student student = new Student(FlowId, type, idCard, examCard,
 46                         studentName, locatoin, grade);
 47                 
 48                 students.add(student);
 49 
 50             }
 51 
 52 
 53         } catch (Exception e) {
 54             e.printStackTrace();
 55         } finally {
 56 
 57             // 关闭资源
 58             try {
 59                 if (resultSet != null) {
 60                     resultSet.close();
 61                 }
 62             } catch (SQLException e) {
 63                 e.printStackTrace();
 64             }
 65 
 66             try {
 67                 if (preparedStatement != null) {
 68                     preparedStatement.close();
 69                 }
 70             } catch (SQLException e) {
 71                 e.printStackTrace();
 72             }
 73 
 74             try {
 75                 if (connection != null) {
 76                     connection.close();
 77                 }
 78             } catch (SQLException e) {
 79                 e.printStackTrace();
 80             }
 81         }
 82 
 83         return students;
 84     }
 85 
 86     public boolean deleteByFlowId(int flowId){
 87         
 88         Connection connection = null;
 89         PreparedStatement preparedStatement = null;
 90         boolean  flage = false;
 91         
 92         try {
 93 
 94             String driverClass = "com.mysql.jdbc.Driver";
 95             String url = "jdbc:mysql://127.0.0.1:3306/atguigu";
 96             String user = "root";
 97             String password = "zhangzhen";
 98             // 加载驱动类
 99             Class.forName(driverClass);
100             connection = DriverManager.getConnection(url, user, password);
101             
102             String sql = "DELETE  FROM student WHERE FlowID = ?";
103             
104             preparedStatement = connection.prepareStatement(sql);
105             preparedStatement.setInt(1, flowId);
106             int result = preparedStatement.executeUpdate();
107             if(result >= 0){
108                 flage = true;
109             }
110 
111         } catch (Exception e) {
112             e.printStackTrace();
113         } finally {
114 
115             // 关闭资源
116             
117 
118             try {
119                 if (preparedStatement != null) {
120                     preparedStatement.close();
121                 }
122             } catch (SQLException e) {
123                 e.printStackTrace();
124             }
125 
126             try {
127                 if (connection != null) {
128                     connection.close();
129                 }
130             } catch (SQLException e) {
131                 e.printStackTrace();
132             }
133         }
134         
135         return flage;
136     }
137     
138     
139 }

  6)Student.java

  1 package com.jason.testMVC;
  2 
  3 /**
  4  * 
  5  * @author: jason
  6  * @time:2016年5月24日下午11:31:08
  7  * @description:
  8  */
  9 public class Student {
 10     private int flowId;
 11     
 12     private int type;
 13     
 14     private String idCard;
 15     
 16     private String examCard;
 17     
 18     private String studentName;
 19     
 20     private String location;
 21     
 22     private int grade;
 23 
 24     public Integer getFlowId() {
 25         return flowId;
 26     }
 27 
 28     public void setFlowId(Integer flowId) {
 29         this.flowId = flowId;
 30     }
 31 
 32     public int getType() {
 33         return type;
 34     }
 35 
 36     public void setType(int type) {
 37         this.type = type;
 38     }
 39 
 40     public String getIdCard() {
 41         return idCard;
 42     }
 43 
 44     public void setIdCard(String idCard) {
 45         this.idCard = idCard;
 46     }
 47 
 48     public String getExamCard() {
 49         return examCard;
 50     }
 51 
 52     public void setExamCard(String examCard) {
 53         this.examCard = examCard;
 54     }
 55 
 56     public String getStudentName() {
 57         return studentName;
 58     }
 59 
 60     public void setStudentName(String studentName) {
 61         this.studentName = studentName;
 62     }
 63 
 64     public String getLocation() {
 65         return location;
 66     }
 67 
 68     public void setLocation(String location) {
 69         this.location = location;
 70     }
 71 
 72     public int getGrade() {
 73         return grade;
 74     }
 75 
 76     public void setGrade(int grade) {
 77         this.grade = grade;
 78     }
 79 
 80     public Student(Integer flowId, int type, String idCard, String examCard,
 81             String studentName, String location, int grade) {
 82         super();
 83         this.flowId = flowId;
 84         this.type = type;
 85         this.idCard = idCard;
 86         this.examCard = examCard;
 87         this.studentName = studentName;
 88         this.location = location;
 89         this.grade = grade;
 90     }
 91 
 92     //用于反射
 93     public Student() {
 94         
 95     }
 96 
 97     @Override
 98     public String toString() {
 99         return "Student [flowId=" + flowId + ", type=" + type + ", idCard="
100                 + idCard + ", examCard=" + examCard + ", studentName="
101                 + studentName + ", location=" + location + ", grade=" + grade
102                 + "]";
103     }
104     
105     
106 
107 }

5.简单总结

 1)对于MVC设计模式的认识

  ① M: Model. Dao

  ② V: View. JSP, 在页面上填写 Java 代码实现显示

  ③ C: Controller. Serlvet: 

      I. 受理请求

       II. 获取请求参数

              III. 调用 DAO 方法

       IV. 可能会把 DAO 方法的返回值放入request 中

      V. 转发(或重定向)页面

 

  2)问题和足

  问题:什么时候转发,什么时候重定向 ? 若目标的响应页面不需要从 request 中读取任何值,则可以使用重定向。(还可以防止表单的重复提交)

  不足: I. 代码臃肿,结构不清楚。        解决方案:使用数据库连接池,DBUtils,JDBCUtils 工具类,DAO 基类;

        II. 一个请求一个 Serlvet 不好。    解决方案:一个模块使用一个 Serlvet,即多个请求可以使用一个 Servlet;

     III. 使用不友好。            解决方案:在页面上加入 jQuery 操作提示,如删除,保存等。

原文地址:https://www.cnblogs.com/jasonHome/p/5526308.html