自定义MVC——1
2019-06-05 17:03
99 查看
文章目录
mvc全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。他的核心思想就是各司其职,互不干扰。
为什么使用自定义MVC
以前写的MVC:
实体类、dao、web
AddBookServlet
DelBookServlet
。。。。。。
web.xml
AddBookServlet
DelBookServlet
。。。。。。
BookServlet web.xml BookServlet String methodName = req.getParamater("methodName"); String methodName = req.getParamater("bname"); String methodName = req.getParamater("pice"); String methodName = req.getParamater("type"); ........ Book b = new Book(); b.set() ...... if("add".equals(methodName)){ add(req,resp); } 重定向、转发 req.getResquestDispather("xxx.jsp").forward(req,resp); resp.sendRedirect(); jsp--->methodName=add/del/....
使用自定义MVC和之前的MVC对比,:
1、之前的MVC,BookServlet中的if语句判断非常多
2、自定义MVC可以省去jsp传递到后台封装成对象的过程
3、自定义MVC可以省去结果集的处理。
所有今天讲的是如何自定义MVC:
自定义MVC工作原理图
主控制动态调用子控制器调用完成具体的业务逻辑
请求、主控制器、子控制器
主控制器:查看是否有对应的子控制器来处理用户请求,如果就调用子控制器来处理请求
没有就报错,就处理不了请求
子控制器:就是处理用户请求用的。
举个例子,接下来写一个简易计算机页面:
首先第一步:
UI界面
第一步,写好UI界面代码,
<script type="text/javascript"> function doSub(val){ if(val==1){ calForm.action="${pageContext.request.contextPath}/addCal.action"; } else if(val==2){ calForm.action="${pageContext.request.contextPath}/delCal.action"; } else if(val==3){ calForm.action="${pageContext.request.contextPath}/chenCal.action"; } else if(val==4){ calForm.action="${pageContext.request.contextPath}/chuCal.action"; } calForm.submit(); } </script> <body> <form id="calForm" name="calForm" action="${pageContext.request.contextPath}/addCal.action"> num1:<input type="text" name="num1"><br> num2:<input type="text" name="num2"><br> <button onclick="doSub(1)">+</button> <button onclick="doSub(2)">-</button> <button onclick="doSub(3)">*</button> <button onclick="doSub(4)">%</button> </form> </body> </html>
根据不同的请求进入不同的servlet,使用这种方法的前提,是需要子控制器和主控制器。
写好UI界面,再写主控制器:
package com.shl.framework; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.shl.web.AddCalAction; import com.shl.web.ChenCalAction; import com.shl.web.ChuCalAction; import com.shl.web.DelCalAction; public class DispatcherServlet extends HttpServlet{ private static final long serialVersionUID = -3419628442945899931L; private Map<String, Action> actionMap=new HashMap<>(); public void init() { actionMap.put("/addCal", new AddCalAction()); actionMap.put("/delCal", new DelCalAction()); actionMap.put("/chenCal", new ChenCalAction()); actionMap.put("/chuCal", new ChuCalAction()); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { init(); String url = req.getRequestURI(); url=url.substring(url.lastIndexOf("/"), url.lastIndexOf("."));//获取请求的路径 Action action = actionMap.get(url);//获取请求对应的子控制器 action.execute(req, resp);//调用子控制器处理请求 } }
在主控制器中,根据传来的请求路径,调用不同的servlet,这是自定义MVC的重点,调用子控制中的方法,获得相应,所有再写子控制器。
package com.shl.framework; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 子控制器 * 专门用来处理业务逻辑的 * @author Administrator * */ public interface Action { void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException; }
子控制器在这主要的作用就是让所有请求可以在主控制器中调用这个方法。这里运用了接口实现然后响应。
相关文章推荐
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android 节日短信送祝福(功能篇:1-数据库操作类与自定义ContentProvider)
- 自定义等高的cell
- Android自定义View实现等级滑动条的实例
- extjs 分组函数自定义统计
- shiro学习随笔【五】自定义生成会话ID--SessionIdGenerator
- 自定义ZXing扫码框样式
- 通知 Notification的介绍,以及自定义通知
- 自定义switch控件
- 自定义导航控制器的侧滑
- Excel数据导出,Java自定义注解
- WPF中的事件(二)- 自定义路由事件
- TNotifyEvent自定义消息
- 自定义Section:修改UITableView的Section的背景和字体
- IOS开发之UISearchBar自定义外观
- apache自定义虚拟主机日志格式
- 详细阐述利用ASP.NET 2.0创建自定义Web控件开发说明
- ArcGIS Server 开发系列(五)--自定义 Toolbar 工具2 (转载于Flyingis)
- [教程]自定义sencha touch主题风格
- android 自定义发彩信实现(不调用系统发彩信界面)