zoukankan      html  css  js  c++  java
  • Java Web的MVC框架设计原则

    常用的Java Web框架Struts,Webwork,Struts2,Spring MVC等,它们虽然各有千秋,但均具有着相同的设计原则---前端控制器模式

    理解前端控制器模式前先了解下原始的MVC模式,原始的MVC存在于GUI应用中,原始的MVC寻求一种模式将应用程序分为3 个部分,并且详细定义这3个部分之间的交互,从而降低它们之间的耦合度,让每一部分都专注于自己职责,无须担心其他部分。

    原 始的MVC中,用户与View直接交互,将信息交付给View,然后View将用户提交的信息推送给Controller,Controller在根据 View传递过来的信息对Model操作,最终导致Model的更新,最后将更新的Model通过Controller返回View,View接受更新的 Model后更新自身显示给用户。三层之间交互通过注册事件监听器来触发。

    但 是在Java Web应用中,Model 和Controller在服务器端,而View则在客户端,它们通过遵循Http协议的Http request请求建立通信交互联系。这时候的View不支持自己更新,它只能重新生成新的View,原始的MVC就不适用Java Web应用了。

    Java Web应用的MVC通过一个前端控制器模式来实现在 View和Controller之间增加一个Dispatcher分发器(一般由Servlet实现),根据用户不同的URL,Dispatcher分发 器会根据用户的配置信息转发到不同的Controller,Controller再更新Model,最终会返回一个码值(逻辑视 图),Dispatcher分发器再根据这个码值(逻辑视图)映射到相应的View返回给用户。另外View为了更好的显示视图,一般会使用标签库。

    以 Struts为例,用户通过JSP视图发出请求,首先Web服务器根据请求的映射路径是否符合Struts的核心控制器ActionServlet的请求 后缀(.do / .action),决定是否交由ActionServlet处理,ActionServlet会检查struts-config.xml是否有用户对应的 请求,如果有匹配的请求则转向到相应的Action控制器,控制器再去调用Service和DAO层最终和Model交互,改变Model的状 态,Action控制器最终返回一个ActionForward(码值),ActionServlet会再去struts-config.xml中取检查 控制器内的ActionForward有没有和返回的那个匹配,如果匹配成功,最终生成一个新的JSP视图给用户。

    MVC框架的Dispatcher分发器一般配置在WEB-INF/web.xml中,同时配置相应的url-mapping,分发器随着Java Web应用启动而开启。

    主流Java Web 的 MVC框架和相应的Dispatcher分发器:

    Struts               ---   ActionServlet

    Webwork        ---   ServletDispatcher

    Struts2            ---   FilterDispatcher / StrutsPrepareAndExecuteFilter

    Spring MVC   ---  DispatcherServlet 

    注意:

    1. Struts2的分发器不是Servlet,而是Filter;

    2. Spring MVC的码值是ModelAndView对象,同时也支持纯String的码值。

    参考:

    《Webwork in action 中文版》

  • 相关阅读:
    中关村的那些黑暗的事——北漂18年(17)
    TRS OM error
    The user specified as a definer ('root'@'%') does not exist
    Spring 配置标签——util标签
    关于spring中<util:/>的配置
    Spring配置文件中指定init-method属性的作用
    spring
    could not insert: [com.trs.om.bean.UserLog] The user specified as a definer ('root'@'127.0.0.1') does not exist
    org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.trs.om.bean.User.retryCount
    U盘安装win7 raid设置
  • 原文地址:https://www.cnblogs.com/orientsun/p/2609891.html
Copyright © 2011-2022 走看看