博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Web的MVC框架设计原则
阅读量:4461 次
发布时间:2019-06-08

本文共 1562 字,大约阅读时间需要 5 分钟。

常用的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 中文版》

转载于:https://www.cnblogs.com/orientsun/archive/2012/07/26/2609891.html

你可能感兴趣的文章
enum hack
查看>>
2017.2.7 开涛shiro教程-第六章-Realm及相关对象(三)
查看>>
Visual Studio 2008切换到设计视图卡死解决办法-Troubleshooting "Visual Studio 2008 Design view hangs" issues...
查看>>
数据库设计范式
查看>>
sql2005-数据库备份方案 (转载)
查看>>
centos中安装jdk的操作
查看>>
selenium--等待的三种方式
查看>>
nautilus-open-terminal很有用的插件--鼠标右键打开终端
查看>>
android中自定义的dialog中的EditText无法弹出输入法解决方案
查看>>
Android Activity整体管理和关闭工具类封装
查看>>
nginx 安装
查看>>
路径寻找(隐式图遍历)
查看>>
selenium下拉一个框内的滚动条
查看>>
跟老邓一起学Windows Phone7开发(一)第一个程序
查看>>
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
查看>>
Android电源管理
查看>>
C#_基础_方法以及方法重载(十)
查看>>
新起点新希望
查看>>
php 做数学运算时结果为0的原因
查看>>
LINQ系列:LINQ to DataSet的DataTable操作
查看>>