MVC设计模式在JavaWeb中的应用(一)

MVC基本概念

  • 模型(model) 模型是应用程序的主体部分,模型表示业务 数据和业务逻辑。 一个模型能为多个视图提供数据。 由于应用于模型的代码只需写一次就可以被 多个视图重用,所以提高了代码的可重用性。
  • 视图(view) 视图是用户看到并与之交互的界面,作用如下
    -视图向用户显示相关的数据。
    -接受用户的输入。
    -不进行任何实际的业务处理
  • 控制器(controller) 控制器接受用户的输入并调用模型和视图去完 成用户的需求。 控制器接收请求并决定调用哪个模型组件去处
    理请求,然后决定调用哪个视图来显示模型处 理返回的数据。
  • 示意图这里写图片描述

案例分析

调用情况这里写图片描述


实现代码
StudentDao.java

package com.anqi.javaWeb.mvc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class StudentDao {

        public void deleteStudentByFlowId(Integer flowId) {
            Connection connection = null;
            PreparedStatement preparedStatement = null;

            try {
                String driverClass = "com.mysql.jdbc.Driver";
                String url = "jdbc:mysql:///db_students";
                String user ="root";
                String password = "1995";

                Class.forName(driverClass);
                connection = DriverManager.getConnection(url, user, password);

                String sql = "DELETE FROM t_student WHERE flow_id = ?";
                preparedStatement = connection.prepareStatement(sql);

                preparedStatement.setInt(1, flowId);
                preparedStatement.execute();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(preparedStatement != null) {
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }   
                }
                if(connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }   
                }

            }

        }

        public List<Student> getAll(){

            List<Student> students = new ArrayList<>();         
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;

            try {
                String driverClass = "com.mysql.jdbc.Driver";
                String url = "jdbc:mysql:///db_students";
                String user ="root";
                String password = "1995";

                Class.forName(driverClass);
                connection = DriverManager.getConnection(url, user, password);

                String sql = "SELECT flow_id, type, id_card, exam_card, location, grade "
                        + "FROM t_student";
                preparedStatement = connection.prepareStatement(sql);

                resultSet = preparedStatement.executeQuery();
                while(resultSet.next()) {
                    int flowId = resultSet.getInt(1);
                    int type = resultSet.getInt(2);
                    String idCard = resultSet.getString(3);
                    String examCard = resultSet.getString(4);
                    String location = resultSet.getString(5);
                    int grade = resultSet.getInt(6);

                    Student student = new Student(flowId, type, idCard, examCard, location, grade);
                    students.add(student);          
                    }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(resultSet != null) {
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }   
                }
                if(preparedStatement != null) {
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }   
                }
                if(connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }   
                }

            }

            return students;
        }
}

ListAllStudentsServlet.java

package com.anqi.javaWeb.mvc;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/listAllStudents")
public class ListAllStudentsServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        StudentDao studentDao = new StudentDao();
        List<Student> students = studentDao.getAll();

        request.setAttribute("students", students);

        request.getRequestDispatcher("/students.jsp").forward(request, response);
    }

}

DeleteStudentServlet.java

package com.anqi.javaWeb.mvc;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/deleteStudent")
public class DeleteStudentServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String flowId = request.getParameter("flowId");

        StudentDao studentDao = new StudentDao();
        studentDao.deleteStudentByFlowId(Integer.parseInt(flowId));

        request.getRequestDispatcher("/sucess.jsp").forward(request, response);
    }

}

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href = "listAllStudents">List All Students</a>
</body>
</html>

students.jsp

<%@page import="com.anqi.javaWeb.mvc.Student"%>
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <%
        List<Student> stus = (List<Student>)request.getAttribute("students");
    %>
    <table border = "1" cellpadding = "10" cellspacing = "0">

        <tr>
            <th>FlowId</th>
            <th>Type</th>
            <th>IdCard</th>
            <th>ExamCard</th>
            <th>Location</th>
            <th>Grade</th>
            <th>Delete</th>
        </tr>
        <%
            for(Student s : stus){
        %>
            <tr>
                <td><%= s.getFlowId() %></td>
                <td><%= s.getType() %></td>
                <td><%= s.getIdCard() %></td>
                <td><%= s.getExamCard() %></td>
                <td><%= s.getLocation() %></td>
                <td><%= s.getGrade() %></td>
                <td><a href = "deleteStudent?flowId=<%=s.getFlowId()%>">Delete</a></td>
            </tr>
        <%
            }
        %>
    </table>
</body>
</html>

sucess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    删除操作成功!
    <br><br>
    <a href = "listAllStudents">List All Students</a>
</body>
</html>

运行结果

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

最后分析

【关于MVC 】

1.M: Model.Dao
2.V: View.JSP,在页面上填写Java代码实现显示
3.C: Controller.Serivet:

【过程】
1.受理请求
2.获取请求参数
3.调用DAO方法
4.可能会把DAO 方法的返回值放入request 中
5.转发(或重定向)页面

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

【不足】
1.使用数据库连接池,DBUtils,JDBCUtils 工具类,DAO 基类
2.一个请求一个Sertvet 不好!一个模块使用一个Servet,即多个请求可
以使用一个Servlet
3.在页面上加入jQuery提示

猜你喜欢

转载自blog.csdn.net/baidu_37181928/article/details/79449401