上文中,我们讨论了MVC的架构的基本原理,这里,我们就要开始着手实现一个简单的WEB MVC前端控制器模型。为了实现这个架构的原型,我们必须引入几个新的概念。
- DispatcherServlet:前端控制器,也是整个架构的核心,负责处理和分发请求。
- HandlerMapping:处理器映射,他主要包含的是控制器的列表,对于特定的请求,根据HandlerMapping的映射关系,可以找到特定的控制器。最简单的便是url到控制器的映射。
- HandlerAdapter:对于不同类型的控制器,该类负责把Handler请求处理的结果统一转换成ModelAndView。
- ModelAndView:包含数据和视图的信息,一般包含视图名,和这个视图需要用的数据,这里的Model大家不要误会为模型的概念,它只不过同时包含视图信息及这个视图需要显示的相关信息而已。
- ViewResolver:它View名称解析成View对象。
- View:定义response显示的详细内容。
HandlerMapping:
- package com.google.mvc.web.servlet;
- import javax.servlet.http.HttpServletRequest;
- public interface HandlerMapping {
- String PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE = HandlerMapping.class.getName() + ".pathWithinHandlerMapping";
- Object getHandler(HttpServletRequest request) throws Exception;
- }
HandlerAdapter:
- package com.google.mvc.web.servlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public interface HandlerAdapter {
- boolean supports(Object handler);
- ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
- long getLastModified(HttpServletRequest request, Object handler);
- }
ViewResolver:
- package com.google.mvc.web.servlet;
- public interface ViewResolver {
- View resolveViewName(String viewName) throws Exception;
- }
View:
- package com.google.mvc.web.servlet;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public interface View {
- String getContentType();
- void render(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception;
- }
ModelAndView:
- package com.google.mvc.web.servlet;
- import java.util.HashMap;
- import java.util.Map;
- public class ModelAndView {
- private Object view;
- private Map<String, Object> model;
- private boolean cleared;
- public ModelAndView() {
- }
- public ModelAndView(String viewName) {
- this.view = viewName;
- }
- public ModelAndView(View view) {
- this.view = view;
- }
- public ModelAndView(String viewName, Map<String, Object> model) {
- this.view = viewName;
- if (model != null) {
- addAllObjects(model);
- }
- }
- public ModelAndView(View view, Map<String, Object> model) {
- this.view = view;
- if (model != null) {
- addAllObjects(model);
- }
- }
- public ModelAndView(String viewName, String modelName, Object modelObject) {
- this.view = viewName;
- addObject(modelName, modelObject);
- }
- public ModelAndView(View view, String modelName, Object modelObject) {
- this.view = view;
- addObject(modelName, modelObject);
- }
- public void setViewName(String viewName) {
- this.view = viewName;
- }
- public String getViewName() {
- return (this.view instanceof String ? (String) this.view : null);
- }
- public void setView(View view) {
- this.view = view;
- }
- public View getView() {
- return (this.view instanceof View ? (View) this.view : null);
- }
- public boolean hasView() {
- return (this.view != null);
- }
- public boolean isReference() {
- return (this.view instanceof String);
- }
- protected Map<String, Object> getModelInternal() {
- return this.model;
- }
- public Map<String, Object> getModelMap() {
- if (this.model == null) {
- this.model = new HashMap<String, Object>();
- }
- return this.model;
- }
- public Map<String, Object> getModel() {
- return getModelMap();
- }
- public ModelAndView addObject(String attributeName, Object attributeValue) {
- getModelMap().put(attributeName, attributeValue);
- return this;
- }
- public ModelAndView addObject(Object attributeValue) {
- getModelMap().put(attributeValue.toString(), attributeValue);
- return this;
- }
- public ModelAndView addAllObjects(Map<String, Object> modelMap) {
- getModelMap().putAll(modelMap);
- return this;
- }
- public void clear() {
- this.view = null;
- this.model = null;
- this.cleared = true;
- }
- public boolean isEmpty() {
- return (this.view == null && this.model == null);
- }
- public boolean wasCleared() {
- return (this.cleared && isEmpty());
- }
- public String toString() {
- StringBuffer buf = new StringBuffer("ModelAndView: ");
- if (isReference()) {
- buf.append("reference to view with name '").append(this.view).append("'");
- } else {
- buf.append("materialized View is [").append(this.view).append(']');
- }
- buf.append("; model is ").append(this.model);
- return buf.toString();
- }
- }
这几个类由DispatcherServlet管理和控制,以下是它们的序列图:
这些对象需要怎么注入到系统中呢?这里当然少不了配置文件的支持,现在比较流行的MVC框架大多可以使用Spring作为其IOC容器,为了简单起见,我们自己决定模拟Spring简单地实现一个配置管理容器,用于管理我们的各种对象资源。
原文地址:http://blog.csdn.net/zhiqiangzhan/article/details/4762600
相关推荐
基于MVC架构的知识管理系统-开题报告.docx基于MVC架构的知识管理系统-开题报告.docx基于MVC架构的知识管理系统-开题报告.docx基于MVC架构的知识管理系统-开题报告.docx基于MVC架构的知识管理系统-开题报告.docx基于...
Net实战商用源码---ASP.NET MVC多用户博客源码
计算机前端-核心编程. MVC和blog项目.day2-02MVC第8个版本:基础控制器类实现.avi
基于MVC架构的知识管理系统-开题报告.pdf基于MVC架构的知识管理系统-开题报告.pdf基于MVC架构的知识管理系统-开题报告.pdf基于MVC架构的知识管理系统-开题报告.pdf基于MVC架构的知识管理系统-开题报告.pdf基于MVC...
计算机前端-核心编程. MVC和blog项目.day2-05MVC第11个版本:前端控制器.avi
计算机前端-核心编程. MVC和blog项目.day2-04MVC第10个版本:文件简单分目录.avi
计算机前端-核心编程. MVC和blog项目.day2-09MVC第13个版本:类的自动加载.avi
运用JSP+Struts+JSTL技术的MVC架构,附带项目安装步骤。
微软的MVC组件及源码-----微软的MVC组件及源码
php mvc架构电商系统开源源码,测试可以使用 mvc架构 github linux内核 模块 系统架构师 ,可以使用,不能用,分数返回给你
1、实现功能:对新闻内容和新闻类别实现增、删、改、查的管理 2、.实现技术:jsp、javascript.脚本语言、JSTL标签、JDBC数据库连接技 术 、分页技术。 3、实现模式:MVC分层模式、工厂模式
最新JAVAEEMVC架构餐饮管理系统源码MYSQL数据库MVC架构餐饮管理系统源码
计算机前端-核心编程. MVC和blog项目.day3-02博客前后台功能介绍.avi
C#基于mvc架构的物流管理系统源码(课程设计).zip 代码完整下载可用,确保可以运行。 C#基于mvc架构的物流管理系统源码(课程设计).zip 代码完整下载可用,确保可以运行。C#基于mvc架构的物流管理系统源码...
ASP.NET MVC 4 插件化架构简单实现 ASP.NET MVC 4 插件化架构简单实现-思路篇 http://blog.csdn.net/hao_ds/article/details/42102969 ASP.NET MVC 4 插件化架构简单实现-实例篇 ...
MVC经典后台管理系统源码-代码很全
资源名:基于ASP.NET MVC的三层架构博客网站系统源码 资源类型:程序源代码 源码说明: 使用ASP.NET写的三层架构博客系统 带SEO优化 完整代码 适合学习使用 适合人群:新手及有一定经验的开发人员
Spring MVC--MVC架构的Controller层 Spring --MVC架构的Sevice、Domain层 MyBtais --MVC架构的Dao层 Mysql --最流行开源的关系型数据库 创建数据库 1、创建数据库:opp CREATE DATABASE opp; USE opp; 创建...
Microsoft下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en