关于java的mvc框架层出不穷,可能大家都会用,但是具体的原理知道不知道呢。所以我想写一个写一个简单mvc的系列博客,主要面向想了解这些原理的。

其实所谓的mvc框架,基本都是一个原理,就是配置一个filter或者servlet来拦截所有的请求,然后转发请求。

这个图就能说明mvc的工作模式

1.首先页面发送一个post请求,请求到某一个action。

2.然后由servlet或filter进行拦截,拦截固定后缀的请求,比如*.action,这里比如我们发送的请求是UserAction.action,servlet或filter就会拦截下来,然后在servlet里进行封装,转发到某一个action里。处理完毕后,再通过拦截器进行转发,回到配置好的页面。

下面是一个struts2的配置文件(网上找的)。


    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    3. <display-name>Struts Blank</display-name>
    4. <filter>
    5. <!-- 配置Struts2核心Filter的名字 -->
    6. <filter-name>struts2</filter-name>
    7. <!-- 配置Struts2核心Filter的实现类 -->
    8. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    9. <init-param>
    10. <!-- 配置Struts2框架默认加载的Action包结构,可以没有。 -->
    11. <param-name>actionPackages</param-name>
    12. <param-value>org.apache.struts2.showcase.person</param-value>
    13. </init-param>
    14. <!-- 配置Struts2框架的配置提供者类 -->
    15. <init-param>
    16. <param-name>configProviders</param-name>
    17. <param-value>lee.MyConfigurationProvider</param-value>
    18. </init-param>
    19. </filter>
    20. <!-- 配置Filter拦截的URL -->
    21. <filter-mapping>
    22. <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
    23. <filter-name>struts2</filter-name>
    24. <url-pattern>/*</url-pattern>
    25. </filter-mapping>
    26. <welcome-file-list>
    27. <welcome-file>index.html</welcome-file>
    28. </welcome-file-list>
    29. </web-app>
 

这里的org.apache.struts2.dispatcher.FilterDispatcher就是图中第2步中的拦截器。由于我没看源码,所以就大概说一下这个拦截器在中间都做了什么动作。

1.拦截从页面发来的请求。假设这里的请求是 UserAction.action

2.然后拦截器会读取框架配置文件,找到UserAction这个类

3.找到这个类以后,利用java的反射原理,封装请求发来的参数

4.把封装好的参数转发给UserAction

5.UserAction执行其中的逻辑,返回一个值,根据这个值,由拦截器转发执行完毕的结果,跳到制定页面。

这大概就是一个mvc框架的流程。可见并不复杂,所以我就打算写一个简单的框架,来详细的带大家理解mvc。

写这个mvc主要就是用到了java的反射原理,像第2步中,怎么找到把请求转发给哪个类?第3步中的怎么把页面的数据进行封装?还有第5步中怎么根据值确定返回哪个页面?

这些基本都是用的java反射原理。

在我写的这个mvc框架中,我是用的注解配置,所以这里还设计到自定义注解。当然你也可以自己定制通过xml来配置你的mvc框架。

基本原理都是相同的。

下一篇文章我将讲解一下其中的基础知识。也就是java反射跟自定义注解以及他们在mvc框架中的应用。

其实本来想录个视频跟大家讲解的,又怕没多少人看,到时候就白费力气了。所以就写博客吧,当一个自己的积累。

如果有错误,请大家指出,谢谢!

大家一起写mvc(一)的更多相关文章

  1. 60行以内写mvc

    标题党.几天前看到一个30行写mvc的文章,东施效颦,也动手写了个60行的,功能上略微扩充一些,记录下来,后面有时间可以继续优化. mvc其实是一个观察者模式.view来监听model,所以当mode ...

  2. 大家一起写mvc(三)_结束

    上一篇介绍到要写mvc的所用的核心技术,这一篇我们就开始真正的开始写mvc,其实就是把昨天写过的代码进行一些组装就可以了. 我们用eclipse新建一个web项目.然后web.xml如下 <?x ...

  3. 大家一起写mvc(二)

    上一篇已经看了,我想大家都明白了mvc的原理,今天我们来说一下要写自己mvc框架必须要会的技术. mvc的目录是这样的 src目录是我们核心的mvc代码.这个代码明天讲,今天主要讲的代码都在test目 ...

  4. 手写MVC框架(一)-再出发

    背景 前段时间把之前写的DAO框架(手写DAO框架(一)-从“1”开始)整理了一下,重构了一版.整理过程中看以前写的代码,只是为了了解实现,只是为了实现,代码写的有点粗糙.既然已经整理了DAO框架,索 ...

  5. 手写MVC框架(二)-代码实现和使用示例

    --------上一篇:手写MVC框架(一)-再出发----- 背景 书接上文,之前整理了实现MVC框架需要写哪些东西.这周粗看了一下,感觉也没多少工作量,所以就计划一天时间来完成.周末的时间,哪会那 ...

  6. 源码分析系列 | 从零开始写MVC框架

    1. 前言 2. 为什么要自己手写框架 3. 简单MVC框架设计思路 4. 课程目标 5. 编码实战 5.1 配置阶段 web.xml配置 config.properties 自定义注解 5.2 初始 ...

  7. 基于j2ee的程序代写MVC架构

    人力资源管理系统 完成系统静态页面设计,页面数量不少于10个,页面需用CSS进行美化,并为需要验证的信息利用JavaScript提供客户端验证.要求至少包含部门信息及部门内员工信息的添加.修改.删除和 ...

  8. 使用C#写MVC框架(一:核心原理)

    目录: 一.MVC原理解析 二.HttpHandler 1.HttpHandler,IHttpHandler,MvcHandler的说明 2.IHttpHandler解析 3.MvcHandler解析 ...

  9. 我的代码,写的pagebase。还是留着吧。语义化,与我的云平台一样,只不过云平台是用js写的。这个是webform.下回写mvc吧。核心很简单。

    Ps:记一下用的时候,一不小心我手贱碰到的问题吧:我在页面里面加上了form runat=server,然后所有的html控件就再也找不着了.就是下面的control collection这里,如果加 ...

随机推荐

  1. [转] mhvtl虚拟磁带库的安装与应用

    转自:candon123  -- http://candon123.blog.51cto.com/704299/388192/ 1.获取mhvtl: 官方网站:http://mhvtl.nimsa.u ...

  2. mysql死锁问题解决步骤

    锁表产生的原因 锁表的具体情况 解决锁表问题 1.查询是否锁表 show OPEN TABLES where In_use > 0; 2.查询进程 show processlist; 查询到相对 ...

  3. Web服务器Nginx多方位优化策略

    标签:性能 Web 架构 Nginx 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dongsong.blog.51cto.co ...

  4. <T>的用法

    ///类型转换 template <class T1,class T2> vector<T2> ObjcetsSwap(vector<T1> objects) { ...

  5. spring 源码下载地址

    1, github: https://github.com/spring-projects/spring-framework SVN: https://github.com/spring-projec ...

  6. Hibernate框架—简介

    ORM对象/关系数据库映射 ORM全称Object/Relation Mapping,对象/关系数据库映射,可以理解成一种规范.该框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射. ORM ...

  7. UWP深入学习五: 传感器与搜索、共享及链接

    Responding to motion and orientation sensors: Quickstart: Responding to user movement with the accel ...

  8. Android 隐藏软键盘方法

    第一种:public static void hideInput(Activity activity) { View curFoc = activity.getCurrentFocus(); if ( ...

  9. 公网IP映射修改后,原先的图片访问却不行了

    描述:www与img在一个公网的nginx下时,www访问img没问题   ip:*.*.*.26 www与jimg同样还在同一组nginx,改另一个公网IP映射进来的时候,却访问不了  ip:*.* ...

  10. powerdesigner12.5入门教程

    2015年1月23日21:13:43|  分类: 默认分类 |  标签: |字号大中小 订阅 转自http://blog.163.com/aijingyuan_198814/blog/static/1 ...