关于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. Bridging signals hdu 1950 (最长上升子序列)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1950 题意:求最长上升(不连续or连续)子序列 推荐博客链接: http://blog.csdn.n ...

  2. linux学习之——数据操作:添加与查询

    说明: 在linux系统中,利用搭建的服务器,编写两个页面,一个添加信息,一个展现信息: 主要涉及到:php+mysql的操作: 数据添加页面: <html> <head> & ...

  3. [转] linux虚拟带库操作笔记

    原文来自:“王旺的书房” ---- http://blog.itpub.net/271063/viewspace-1059840/ 分类: Linux 查看设备[root@node1 ~]# lssc ...

  4. Gossip protocol(zz)

    Gossip protocol 这是一系列用于P2P的通信协议.简单来说,就是模拟人类社会中流言传播的方式.每个节点随机地把消息发给它的邻居,接到消息的节点,如果之前没收到这个消息,则会继续随机地转发 ...

  5. java图形化编程

    转载 学习Java Swing图形化编程,我们首先要了解三个最基本的概念:顶层容器,控件,布局. 下面就来介绍一下这三个基本概念 1.顶层容器 什么是顶层容器?当我们使用Java进行图形编程的时候,图 ...

  6. Windows升级(安装)MySQL 5.7.x 解压版 + 异常处理

    说明 版本升级(个人原因): 因为5.5的版本不能执行如下sql语句,故卸装5.5升级安装mysql-5.7.15: `timeName` timestamp(3) NULL DEFAULT NULL ...

  7. Android之Inflate()方法用途

    转自:http://blog.csdn.net/andypan1314/article/details/6715928 Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的 ...

  8. maven异常

    1.There are test failures pom中加入: <build> <plugins> <plugin> <groupId>org.ap ...

  9. Visual Studio 2013 支持MVC3不完善,Razor智能提示不完整或者不提示

    以下只是针对MVC3. 前天试用Orchard 1.8,用VS2013新建C#类库项目(ClassLibrary project),然后新建Views文件夹,新建cshtml,然后引用MVC3的相关d ...

  10. HTML之DOM

    对于B/S开发,客户端与服务器端的交互是非常必要的,JavaScript的提出解决了很多问题,AJAX的提出也解决了异步通信的问题,更加为用户着想了.而DOM是其中非常基础的知识,在学习AJAX的同时 ...