2019独角兽企业重金招聘Python工程师标准>>>

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Ⅰ呢?

先来看一小段代码:

<sky:init method="com.sky.platform.Login.init">
<html>
<head>
<title>${Title}</title>
<script>
Sky.onReady(function(){$("btnLogin").on("click", function login(){var dc = Form.getData("loginForm");Server.sendRequest("com.sky.platform.Login.submit",dc,function(response){if(response&&response.Status==0){alert(response.Message);}});});
});
</script>
</head>
<body>
<form id="loginForm" method="post" style=" display:block;height:100%;">
<input name="UserName" type="text" />
<input name="Password" type="password" />
<input id="btnLogin" type="button"/>
</form>
</body>
</html>
</sky:init>

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

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

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

${Title}

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

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

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

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

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

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

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

刚发现两个好贴,附上链接,供大家一起探讨
MVC的迷思: http://www.iteye.com/topic/6284
jsplet:对Model 2模式的批判: http://www.iteye.com/topic/11726

转载于:https://my.oschina.net/darkness/blog/802209

MVC系列框架之Struts存在的意义是什么?相关推荐

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

    阅读目录 一.MVC原理解析 1.MVC原理 二.HttpHandler 1.HttpHandler.IHttpHandler.MvcHandler的说明 2.IHttpHandler解析 3.Mvc ...

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

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

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MV ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)...

    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)...

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  7. ASP .NET Core Web MVC系列教程四:添加模型

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程三:添加视图 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)

    前言目录 前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进 ...

  9. spring框架mvc框架_Spring的MVC测试框架入门–第1部分

    spring框架mvc框架 最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spri ...

最新文章

  1. Java8中Lambda表达式的10个例子
  2. keras/tensorflow 模型保存后重新加载准确率为0 model.save and load giving different result
  3. SSM项目各层单元测试
  4. 看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)
  5. DELL N系列交换机/N3048交换机SSH配置
  6. go使用MySQL数据库
  7. linux中ps aux和ps -ef下显示的意义
  8. ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组
  9. php图片长宽处理,用php调整图片宽高 | 学步园
  10. Python笔记四之操作文件
  11. JDK源码(11)-Long、Short
  12. IO 流的操作基本规律
  13. 数据库设计及案例分析
  14. MWORKS应用案例 | 基于Modelica的射流管式电液伺服阀的建模仿真
  15. 方正BPM开发平台(FIX ES2007)帮助手册+知识库
  16. 蒙氏素材---创意时钟---三段卡 蒙氏教育
  17. Ubuntu下的lammps GPU加速(真的香)
  18. 【转载】浅的不能再浅的浅谈百利金单双胡及全字尖
  19. 阿龙的学习笔记---如何用C++ STL 实现一个 LRU缓存
  20. SYN5301型 时间检定仪

热门文章

  1. [Tool] 使用CodeMaid自動程式排版 - 摘自网络
  2. Bullet 3D 物理引擎 简析(2)
  3. MSP430学习笔记
  4. SpringBoot整合Druid数据源
  5. 建立Lotus Domino CA验证字权威
  6. LVM逻辑卷管理测试——创建逻辑卷
  7. CSS3 过渡(Transition)
  8. FPGA In/Out Delay Timing Constaint
  9. 连接查询中where子句的执行
  10. 将要看的两本书 - Hide From All - ITeye技术网站