zoukankan      html  css  js  c++  java
  • 大家一起写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框架中的应用。

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

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

  • 相关阅读:
    为 ADO 程序员设计的 ADO.NET (转)
    MSN 历史纪录分页显示(XML + XSL + Javascript)
    python连接postgresql数据库
    centOS安装scikitlearn
    14. 页高速缓存 20100228 21:10 322人阅读 评论(0) 收藏
    18. 程序的执行 20100302 12:56 131人阅读 评论(0) 收藏
    ttt 20110118 11:49 71人阅读 评论(0) 收藏
    15. 访问文件 20100228 22:55 129人阅读 评论(0) 收藏
    17. 进程间通信 20100302 12:49 191人阅读 评论(0) 收藏
    19(终). 系统启动 20100302 13:00 191人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/-10086/p/4058004.html
Copyright © 2011-2022 走看看