上海城乡建设管理局网站,php网站开发作业,工作啦,下载图片的网站建设MVC 1. 什么是mvc开发模式2. 基于servlet手写mvc框架1. 什么是mvc开发模式
mvc不是一种技术#xff0c;只是一种开发模式使用分层开发模式能在大型项目中#xff0c;让开发人员更好的协同工作便于项目的维护和扩展 M: Model 模型层-数据库层-daoV: View 视图层-…
MVC 1. 什么是mvc开发模式2. 基于servlet手写mvc框架1. 什么是mvc开发模式
mvc不是一种技术只是一种开发模式使用分层开发模式能在大型项目中让开发人员更好的协同工作便于项目的维护和扩展 M: Model 模型层-数据库层-daoV: View 视图层-收集和展示用户数据-html/jspC: Controller-数据封装-逻辑处理-流程控制-servlet/action/controller
2. 基于servlet手写mvc框架
什么是框架 是一种标准或者规范使用别人写好的东西按照他的制造好的轮子他的流程去开发我想要实现的功能提高开发效率降低开发成本。 框架的分类分为前后端框架 前端框架分为功能性的和美观性的功能性的 jQueryvueangular 判断数据合法性dom操作美观性的 bootstrapeasyuireactqucikui… 什么是mvc框架 mvc是后端框架专门用来解决controller与view层数据交互的问题对这个交互过程中的各种操作进行规范和封装让开发人员在开发web应用程序时对请求响应的控制更为方便数据层的访问不属于mvc框架内 mvc框架的职责 规范开发流程对请求数据进行封装如页面有100个表单 多个表单流程跳转的规范 是转发重定向还是js跳转 工作流程图 ActionServlet好比一个大哥 mvc框架的核心功能大哥接收到老板的任务接收到业务请求时安排小弟服务对象实现业务的类来完成任务小弟最后执行任务完成逻辑处理把结果返回大哥最后结果返回流程控制老板客户端。 基于servlet的mvc框架核心成员 ActionServlet servlet 接收特定的请求mvc框架的入口Action接口service方法规范所有小弟的服务方法小弟xxxAction实现接口完成逻辑处理为客户端提供服务.properties键值对配置文件描述业务请求与xxxAction类的路径 反射根据业务请求取到配置文件的服务类可封装response流输出js代码跳转 核心控制器ActionServlet
配置文件 servletservlet-nameActionServlet/servlet-nameservlet-classcom.lovely.mvc.ActionServlet/servlet-class/servletservlet-mappingservlet-nameActionServlet/servlet-nameurl-pattern*.do/url-pattern !-- 如接收query.do 的业务请求--/servlet-mappingaction接口规范服务类
package com.lovely.mvc;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public interface Action {// service服务方法接口返回要跳转的页面urlpublic 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;Overridepublic 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();}}}Overrideprotected 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 {Overridepublic String service(HttpServletRequest req, HttpServletResponse resp) {CommonDao dao new CommonDao();req.setAttribute(list, dao.queryAll(Ticket.class));// 返回转发的地址return /list.jsp;}}
以上就算一个基于servlet实现的mvc框架了别人已经有更牛的框架这里只是拿来分析。上面的代码离不开数据库操作请看 反射和注解对dao层操作