Struts其实就是MVC的代名词,那么提到MVC就不得不提早期的ModelⅠ。那时候JSP页面中混杂了大量的JAVA Scriptlet脚本语句,为了可维护性考虑,有人提出了ModelⅡ,也即现在的MVC模式。所以可以看出来,MVC的提出是建立在早期JSP页面中混杂了大量的JAVA Script脚本语句的前提之下的。在这种情况下MVC的出现让JSP的世界变得干净许多。

虽说是MVC框架,其实有人也指出,Struts系的框架只能算是一种伪MVC。为什么这么说呢?因为它没有MVC中的最核心的部分:事件控制,其实Struts看起来更像是一种控制转发框架。那么这种跳转是否是必须的呢?

自从2005年开始,Ajax开始崭露头角,到现在为止,不谈Ajax已经到了成熟应用的地步,但回头再看MVC,是否可以有另外一种更优雅、清晰的思路来代替早期的ModelⅠ呢?

先来看一小段代码:

  1. <sky:init method="com.sky.platform.Login.init">
  2. <html>
  3. <head>
  4. <title>${Title}</title>
  5. <script>
  6. Sky.onReady(function(){
  7. $("btnLogin").on("click", function login(){
  8. var dc = Form.getData("loginForm");
  9. Server.sendRequest("com.sky.platform.Login.submit",dc,function(response){
  10. if(response&&response.Status==0){
  11. alert(response.Message);
  12. }
  13. });
  14. });
  15. });
  16. </script>
  17. </head>
  18. <body>
  19. <form id="loginForm" method="post" style=" display:block;height:100%;">
  20. <input name="UserName" type="text" />
  21. <input name="Password" type="password" />
  22. <input id="btnLogin" type="button"/>
  23. </form>
  24. </body>
  25. </html>
  26. </sky:init>

看看这段代码是怎么解决早期Model 1的混乱的

  1. <sky:init method="com.sky.platform.Login.init">

com.sky.platform.Login类可以看做是这个页面的后台绑定类,其思路来源于Aspx.Net 
init方法用来做页面的初始化动作 
页面中像这种需要获取的数据就可以这样来实现:

  1. ${Title}

Struts的控制转发很重要的一部分功能就是获取数据放置页面属性范围中,而现在转而用这种方式就可以实现Strtus的获取数据功能。

有人会问,像列表之类的,你一个${}怎么能够实现呢?答案是:我们可以在前台实现对应的Ajax风格的列表控件,如此之类......

像表单其他我们也可以通过Ajax直接提交后台绑定类的方法的方式来实现

  1. Server.sendRequest("com.sky.platform.Login.submit",dc,function(response){
  2. if(response&&response.Status==0){
  3. alert(response.Message);
  4. }
  5. });

这种编程思想与Struts系MVC框架的本质的区别就是完全抛弃了其需要的控制转发配置,因为Struts用来配置控制转发的文件本身只是为了实现其MVC的功能而存在的,那么现在我们已经有了一种替代的解决方案来解决早期的Model1的混乱局面,那么Struts系MVC框架的控制转发是否还有存在的必要呢?

其实这个思路的类似解决方案就是JSF,但是JSF并没有像ASPX.Net那样完全使用后台绑定类的概念,其并没有抛弃类Struts的路由导航配置。

这只是个人观点,欢迎大家讨论、斧正,提出自己的见解!

今日思考:MVC系列框架之Struts存在的意义是什么?的更多相关文章

  1. ASP.NET MVC系列 框架搭建(二)之仓储层的优化

    大神勿喷,小神默默学. 会了就是不值一提的东西,不会就是绝对的高大上. 最后上传源码.希望能给读者带来一些新的认识及知识. 还没上过头条..各位大神,请点支持一下小弟. 陆续更新.更新到你会为止!! ...

  2. ASP.NET MVC系列 框架搭建(一)之仓储层的搭建

    大神勿喷,小神默默学. 会了就是不值一提的东西,不会就是绝对的高大上. 最后上传源码.希望能给读者带来一些新的认识及知识. 还没上过头条..各位大神,请点支持一下小弟. 陆续更新.更新到你会为止!! ...

  3. ASP.NET MVC系列 框架搭建(三)之服务层的搭建

    邯郸学步 吾虽是一不知名的菜鸟,但,吾亦有一个从后台程序员成为一名小小架构师梦想,深知架构师不是想想就成的. 吾已工作过一阵子,吾妄想在真正毕业之后工作一年左右就能拿到那个数ten thousand的 ...

  4. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  5. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)

    前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...

  6. MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

    前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...

  7. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)

    前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

随机推荐

  1. Redis 二:入门基本篇

    .多数据库设置 - ,代表16个数据库 .glob风格通配符 keys * 返回所有 keys ba? 返回 bar keys b[a-z][a-z] 返回btt bar \x 匹配转义字符 .判断一 ...

  2. glog使用

    How To Use Google Logging Library Glog 的基本使用方法在google code上有介绍:How To Use Google Logging Library ;最好 ...

  3. Ios拦截手机短信程序

    引用 1.手机要越狱,没有越狱的话,下面的可以不用看了!  2.IOS 要5.0以上,4.xx的同上  首先,声明下!由于公司移动开发的项目中,需要根据手机的内容进行逻辑处理,也就是要实现手机短信拦截 ...

  4. 什么是Hadoop,怎样学习Hadoop

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上:而且它 ...

  5. cocos2dx中的实现地图卷动的两种方式

    在游戏当中,实现地图卷动是最基本的功能,具体的实现的方法,大致有两类: 方法一:加载两张图片,轮流显示, 优点: 1.无论是地图上下卷动,还是左右卷动都可以 2.支持各种图片,(png,jpg...) ...

  6. SlimDx绘制点图元的问题

    问题:点图元在自己创建的三维环境里渲染不出来,代码如下: GMCustomVertex.PositionNormalColored wellPart = new GMCustomVertex.Posi ...

  7. 【UVA】【11021】麻球繁衍

    数序期望 刘汝佳老师的白书上的例题……参见白书 //UVA 11021 #include<cmath> #include<cstdio> #define rep(i,n) fo ...

  8. oracle——merge

      一.概述 使用merge声明从一个或者更多个表或视图中筛选记录,以用来更新或者插入到一个表或视图中.你可以指定条件以决定是执行update操作还是insert操作到目标表或视图中. 这个声明是一个 ...

  9. C#中Json和List/DataSet相互转换

    #region List<T> 转 Json        /// <summary>        /// List<T> 转 Json        /// & ...

  10. C# 虚方法 与 隐藏方法(new) 区别

    重写和隐藏的定义: 重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的          例如:基类方法声明为virtual(虚方法),派生类中使用override申明此 ...