[原创]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 操作提示,如删除,保存等。