MVC分层开发模式

    技术2026-01-30  3

    MVC

    1. 什么是mvc开发模式2. 基于servlet手写mvc框架

    1. 什么是mvc开发模式

    mvc不是一种技术,只是一种开发模式使用分层开发模式能在大型项目中,让开发人员更好的协同工作便于项目的维护和扩展 M: Model 模型层->数据库层->daoV: View 视图层->收集和展示用户数据->html/jspC: Controller->数据封装->逻辑处理->流程控制->servlet/action/controller

    2. 基于servlet手写mvc框架

    什么是框架?

    是一种标准或者规范,使用别人写好的东西,按照他的制造好的轮子,他的流程,去开发我想要实现的功能,提高开发效率,降低开发成本。

    框架的分类,分为前后端框架 前端框架分为功能性的和美观性的功能性的: jQuery,vue,angular 判断数据合法性,dom操作美观性的: bootstrap,easyui,react,qucikui… 什么是mvc框架

    mvc是后端框架,专门用来解决controller与view层数据交互的问题,对这个交互过程中的各种操作进行规范和封装,让开发人员在开发web应用程序时对请求响应的控制更为方便(数据层的访问不属于mvc框架内)

    mvc框架的职责 规范开发流程对请求数据进行封装(如页面有100个表单 多个表单)流程跳转的规范 (是转发,重定向,还是js跳转)

    工作流程图

    ActionServlet好比一个大哥 (mvc框架的核心功能),大哥接收到老板的任务(接收到业务请求时),安排小弟(服务对象,实现业务的类)来完成任务,小弟最后执行任务(完成逻辑处理),把结果返回大哥,最后结果返回(流程控制)老板(客户端)。

    基于servlet的mvc框架核心成员

    ActionServlet servlet 接收特定的请求,mvc框架的入口Action接口service方法,规范所有小弟的服务方法小弟xxxAction实现接口,完成逻辑处理,为客户端提供服务.properties键值对配置文件,描述业务请求与xxxAction类的路径 (反射根据业务请求,取到配置文件的服务类)可封装response流,输出js代码跳转

    核心控制器ActionServlet

    配置文件 <servlet> <servlet-name>ActionServlet</servlet-name> <servlet-class>com.lovely.mvc.ActionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.do</url-pattern> <!-- 如接收query.do 的业务请求--> </servlet-mapping> action接口,规范服务类 package com.lovely.mvc; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface Action { // service服务方法接口,返回要跳转的页面url public String service(HttpServletRequest req, HttpServletResponse resp); }

    创建配置文件(核心控制器根据业务请求,跳到对应的服务类完成业务)

    控制器代码

    package com.lovely.mvc; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ActionServlet extends HttpServlet { /** * 核心控制servlet * 根据访问方式 和 类的路径信息 到对应的servlet来处理 */ private static final long serialVersionUID = 1L; private Properties property = null; @Override public void init() throws ServletException { property = new Properties(); // 加载配置文件 InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/config.properties"); try { property.load(in); } catch (IOException e) { e.printStackTrace(); } finally { try { if (in != null) in.close(); } catch (IOException e) { e.printStackTrace(); } } } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String uri = req.getRequestURI(); String key = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf(".")); System.out.println(uri + "\t" + key); // 根据请求对象 拿到对应的类 进行服务 String value = property.get(key).toString(); try { // 反射拿到类对象 Class<?> c = Class.forName(value); // 创建action对象 Action action = (Action) c.newInstance(); String result = action.service(req, resp); if (result != null) { // 根据返回结果 决定是请求转发 还是重定向 if (result.startsWith("forward")) { String path = result.split(":")[1]; req.getRequestDispatcher(path).forward(req, resp); } else if (result.startsWith("redirect")) { String path = result.split(":")[1]; resp.sendRedirect(req.getContextPath() + path); } else { // 写路径默认请求转发 req.getRequestDispatcher(result).forward(req, resp); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } 提供服务对象类(以查询为例) package com.lovely.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.lovely.dao.CommonDao; import com.lovely.entity.Ticket; import com.lovely.mvc.Action; public class QueryAction implements Action { @Override public String service(HttpServletRequest req, HttpServletResponse resp) { CommonDao dao = new CommonDao(); req.setAttribute("list", dao.queryAll(Ticket.class)); // 返回转发的地址 return "/list.jsp"; } } 以上就算一个基于servlet实现的mvc框架了,别人已经有更牛的框架,这里只是拿来分析。上面的代码,离不开数据库操作,请看 反射和注解对dao层操作
    Processed: 0.017, SQL: 9