大家一起写mvc(一)

关于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.   
    4.     <display-name>Struts Blank</display-name>  
    5.   
    6.     <filter>  
    7.         <!-- 配置Struts2核心Filter的名字 -->  
    8.         <filter-name>struts2</filter-name>  
    9.         <!-- 配置Struts2核心Filter的实现类 -->  
    10.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
    11.           <init-param>  
    12.               <!-- 配置Struts2框架默认加载的Action包结构,可以没有。 -->  
    13.               <param-name>actionPackages</param-name>  
    14.               <param-value>org.apache.struts2.showcase.person</param-value>  
    15.           </init-param>  
    16.           <!-- 配置Struts2框架的配置提供者类 -->  
    17.           <init-param>  
    18.               <param-name>configProviders</param-name>  
    19.               <param-value>lee.MyConfigurationProvider</param-value>  
    20.           </init-param>  
    21.     </filter>  
    22.     <!-- 配置Filter拦截的URL -->  
    23.     <filter-mapping>  
    24.         <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->  
    25.         <filter-name>struts2</filter-name>  
    26.         <url-pattern>/*</url-pattern>  
    27.     </filter-mapping>  
    28.   
    29.     <welcome-file-list>  
    30.         <welcome-file>index.html</welcome-file>  
    31.     </welcome-file-list>  
    32. </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框架中的应用。

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

 

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。