`

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

阅读更多
    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
分享到:
评论
31 楼 kjj 2010-10-28  
不是本人说mvc,或者鄙视培训,现在那些北大什么鸟,就会教学生配置框架,机械编程,根本不知道mvc之类是咋出来的,这样吧,lz,你什么框架都别用,什么第三方库都别用,然后就用纯粹的servlet+jsp+jdbc 开发一个个真正的大型项目【我也不一定说自己做过的多么大,只是说事】,你坚持用这种方式做上一年试试,看看你能否调入mvc的纠结,或者你可以看看play framework 或者前段时间je上有个大牛开发的douyu,我敢说,你不掉入mvc,就会倾向 play之流【并不是鄙视】,这些事程序技术发展的必经之路,如果你真正学懂了mvc的地位和作用,就不会发这些无聊的想法了,再就推荐你看哪个著名的人叫martin flow 的人写的企业架构模式那本书,相信你看了就不会再想这个问题了,除非你发展衍生出了比mvc更牛,更好的想法,mvc并不是空穴来风,连以前直坚持纯手工的php ,ruby等等动态语言都无可避免的加入mvc,你不要告诉我你理解这些语言逐渐加入mvc的阵营是为了迎合开发者这种想法
30 楼 JetMah 2010-10-28  
一直在用Spring MVC,特别是3.x之后使用注解之后非常非常好用!
29 楼 depravedangel 2010-10-28  
dwbin 写道
depravedangel 写道
hardPass 写道


Servlet的开销问题,是个什么问题啊?那个帖子看了半天,没能够看到答案。

能给我讲一讲啊?


我的理解是:Servlet是有生命周期的,容器需要管理其创建与销毁等,而简单的Class类就没有这么复杂了。这个或许是框架带来的好处之一:Servlet类数目减少。

不是的,servlet的生命周期不是一次请求而是一个context就是随着容器的启动和销毁而完成的,而且servlet是基于web.xml进行,这个配置文件包含了整个sun发布的web标准的一些核心配置,我们所要的不过是一种专注我觉得,只能算是一种分离吧。框架的好处是让大家感觉不到一些底层接口的存在。

这部分我不是很懂,说一下个人猜测:
Serlvet是需要容器去管理的,而简单的Class应该是交由JVM去管理的,容器管理的东西开销肯定是需要考虑的,几个、几十个servlet看不出来,但上千个servlet的开销还是不容忽视的。好像容器中servlet也是有数量限制的,这个不单单是封装接口,隐藏底层实现的问题了。
28 楼 hardPass 2010-10-28  
dwbin 写道
depravedangel 写道
hardPass 写道


Servlet的开销问题,是个什么问题啊?那个帖子看了半天,没能够看到答案。

能给我讲一讲啊?


我的理解是:Servlet是有生命周期的,容器需要管理其创建与销毁等,而简单的Class类就没有这么复杂了。这个或许是框架带来的好处之一:Servlet类数目减少。

不是的,servlet的生命周期不是一次请求而是一个context就是随着容器的启动和销毁而完成的,而且servlet是基于web.xml进行,这个配置文件包含了整个sun发布的web标准的一些核心配置,我们所要的不过是一种专注我觉得,只能算是一种分离吧。框架的好处是让大家感觉不到一些底层接口的存在。


差不多是这个意思:
用了框架,那么具体业务逻辑模块的开发过程中,不需要依赖诸如“HttpServlet”、“HttpRequest”等api接口。
但是,却需要 和第三方框架的api绑在一起。

说白了:不与虎谋皮,可以与狼谋皮。
27 楼 hardPass 2010-10-28  
还是没看明白。
没觉得有什么Servlet开销问题。即使有开销,那干脆就像struts一样,搞个控制跳转的Servlet好了,搞个框架也没什么问题,关键是只要轻。

另外:怎么这么多人投“新手帖”啊?

其实我也觉得,在Servlet3、包括“推”技术日益发展今天,web模式,一定会改变的。

26 楼 dwbin 2010-10-28  
depravedangel 写道
hardPass 写道


Servlet的开销问题,是个什么问题啊?那个帖子看了半天,没能够看到答案。

能给我讲一讲啊?


我的理解是:Servlet是有生命周期的,容器需要管理其创建与销毁等,而简单的Class类就没有这么复杂了。这个或许是框架带来的好处之一:Servlet类数目减少。

不是的,servlet的生命周期不是一次请求而是一个context就是随着容器的启动和销毁而完成的,而且servlet是基于web.xml进行,这个配置文件包含了整个sun发布的web标准的一些核心配置,我们所要的不过是一种专注我觉得,只能算是一种分离吧。框架的好处是让大家感觉不到一些底层接口的存在。
25 楼 depravedangel 2010-10-28  
hardPass 写道


Servlet的开销问题,是个什么问题啊?那个帖子看了半天,没能够看到答案。

能给我讲一讲啊?


我的理解是:Servlet是有生命周期的,容器需要管理其创建与销毁等,而简单的Class类就没有这么复杂了。这个或许是框架带来的好处之一:Servlet类数目减少。
24 楼 hardPass 2010-10-28  
depravedangel 写道
hardPass 写道
我做过的web项目不多,但是也用过springMVC、Struts1、Struts2,也有直接是servlet的。

总的老说,我是非常讨厌这些框架的东西的。

毕竟每个框架都有自己的api以及一些规范什么的。

而Servlet本身就足以完成这些任务了。

另外有段时间,曾发现,找Servlet或者其他Java web的相关文档,竟然比找Struts2的文档还难。

同时,发现servlet3标准也是蛮好的。
等到Servlet3流行起来后,这些第三方框架必然是要升级、甚至会有天翻地覆的变化,
而作为用户的我们,恐怕又要经历一次学习的过程。

另外上面有人提到了,MVC的View不一定是表现页面,纯数据(如json)也是view的一种形式啊,真的不应该拘泥于什么什么模式。V,说到底,应该是我们程序的输出口。

我对MVC理解不深刻,一直认为,叫做CMV比较合适。


刚刚看到一个老帖:http://www.iteye.com/topic/11726
我看了收获挺大,哈哈,您有空也看看吧,这个里面提到了Servlet的开销问题,而框架一般只有一些主控Servlet,其他的都是简单JAVA类。

另外,对应一家想长远发展的公司,有自己的一套技术体系比较好,仅为个人观点。



Servlet的开销问题,是个什么问题啊?那个帖子看了半天,没能够看到答案。

能给我讲一讲啊?

23 楼 depravedangel 2010-10-28  
Java_xiaohao 写道

Struts没有存在的意义!
那你存在的意义是啥?

这位兄弟应该是没有认真看完帖子。对于早期的应用,Struts的解决方案已经算是非常优秀了,这点相信大家都知道。但对于当前的技术发展来看,可以有更加优秀的解决方案来替代了。技术在发展,人总得往前看的......
22 楼 depravedangel 2010-10-28  
抛出异常的爱 写道
看看vb把所有的数据库操作绑在一个按键上面的开发方式....

看看servlet控制js文件生成.....

mvc.......人的脑力有限,

显示器里一屏代码的总数也不够多.

如果蛤蟆早出个十年.
应该没有struts什么事了.

突然想知道抛哥的职业经历,哈哈,看您的回复,每次都是针针见血,令人回味无穷......
21 楼 Java_xiaohao 2010-10-28  

Struts没有存在的意义!
那你存在的意义是啥?
20 楼 抛出异常的爱 2010-10-28  
看看vb把所有的数据库操作绑在一个按键上面的开发方式....

看看servlet控制js文件生成.....

mvc.......人的脑力有限,

显示器里一屏代码的总数也不够多.

如果蛤蟆早出个十年.
应该没有struts什么事了.
19 楼 depravedangel 2010-10-28  
hardPass 写道
我做过的web项目不多,但是也用过springMVC、Struts1、Struts2,也有直接是servlet的。

总的老说,我是非常讨厌这些框架的东西的。

毕竟每个框架都有自己的api以及一些规范什么的。

而Servlet本身就足以完成这些任务了。

另外有段时间,曾发现,找Servlet或者其他Java web的相关文档,竟然比找Struts2的文档还难。

同时,发现servlet3标准也是蛮好的。
等到Servlet3流行起来后,这些第三方框架必然是要升级、甚至会有天翻地覆的变化,
而作为用户的我们,恐怕又要经历一次学习的过程。

另外上面有人提到了,MVC的View不一定是表现页面,纯数据(如json)也是view的一种形式啊,真的不应该拘泥于什么什么模式。V,说到底,应该是我们程序的输出口。

我对MVC理解不深刻,一直认为,叫做CMV比较合适。


刚刚看到一个老帖:http://www.iteye.com/topic/11726
我看了收获挺大,哈哈,您有空也看看吧,这个里面提到了Servlet的开销问题,而框架一般只有一些主控Servlet,其他的都是简单JAVA类。

另外,对应一家想长远发展的公司,有自己的一套技术体系比较好,仅为个人观点。
18 楼 hardPass 2010-10-28  
我做过的web项目不多,但是也用过springMVC、Struts1、Struts2,也有直接是servlet的。

总的老说,我是非常讨厌这些框架的东西的。

毕竟每个框架都有自己的api以及一些规范什么的。

而Servlet本身就足以完成这些任务了。

另外有段时间,曾发现,找Servlet或者其他Java web的相关文档,竟然比找Struts2的文档还难。

同时,发现servlet3标准也是蛮好的。
等到Servlet3流行起来后,这些第三方框架必然是要升级、甚至会有天翻地覆的变化,
而作为用户的我们,恐怕又要经历一次学习的过程。

另外上面有人提到了,MVC的View不一定是表现页面,纯数据(如json)也是view的一种形式啊,真的不应该拘泥于什么什么模式。V,说到底,应该是我们程序的输出口。

我对MVC理解不深刻,一直认为,叫做CMV比较合适。

17 楼 满月无双 2010-10-28  
depravedangel 写道
H_eaven 写道
楼主应该是个火影迷哈.  我想使用潘恩对鸣人的话"你只见树木,不见森林啊".

树木还是森林,不到最后,谁会知道呢?
引用鼬的一句:“只要是人……都是依靠自己的知识、与认识,并且也被之束缚生活着的。 那就叫做现实。 但是,知识和认识是暧昧不清的东西,现实也许只是镜花水月。人,都是活在自己的执念中的…… ”......

其实这里我想表达的意思是作为一个MVC的实现,或者是一个伪实现,Strtus中的控制转发可以用一种更优雅的解决方式来实现。对于可维护性、可扩展性都是有帮助的。
可维护性:不再需要去弄清页面到底是怎么跳转的,现在后台可以更加关注于数据,前台可以专注于客户体验
长期技术方案的可扩展性:一旦前端技术发展了,可以更加简单的迭代更新,顺应业界的技术发展,或许我这个实现思路也不是很好,但是Struts的控制跳转到页面的编程方式是可以考虑被废弃的。

这里大家就不要非要去纠结于Strtus是否是一种MVC实现,大家能明白我的意思就可以了。

既然Struts得总控就是一个Servlet,不能把Struts的mvc理解为Servlet实现的吗?
16 楼 depravedangel 2010-10-28  
H_eaven 写道
楼主应该是个火影迷哈.  我想使用潘恩对鸣人的话"你只见树木,不见森林啊".

树木还是森林,不到最后,谁会知道呢?
引用鼬的一句:“只要是人……都是依靠自己的知识、与认识,并且也被之束缚生活着的。 那就叫做现实。 但是,知识和认识是暧昧不清的东西,现实也许只是镜花水月。人,都是活在自己的执念中的…… ”......

其实这里我想表达的意思是作为一个MVC的实现,或者是一个伪实现,Strtus中的控制转发可以用一种更优雅的解决方式来实现。对于可维护性、可扩展性都是有帮助的。
可维护性:不再需要去弄清页面到底是怎么跳转的,现在后台可以更加关注于数据,前台可以专注于客户体验
长期技术方案的可扩展性:一旦前端技术发展了,可以更加简单的迭代更新,顺应业界的技术发展,或许我这个实现思路也不是很好,但是Struts的控制跳转到页面的编程方式是可以考虑被废弃的。

这里大家就不要非要去纠结于Strtus是否是一种MVC实现,大家能明白我的意思就可以了。
15 楼 depravedangel 2010-10-28  
hardPass 写道
我也一直有疑问,Servlet本身就可以直接实现mvc,为什么还要用struts?

对于改善早期在JSP中业务代码掺杂在表示层中的状况,Struts还是功不可没的

但对于当前技术发展的趋势,其核心思想之一的控制转发,我个人觉得应该需要考虑被废弃,因为现在我们有更加优秀的替代方案。
14 楼 depravedangel 2010-10-28  
JE帐号 写道
Struts的确不是MVC的代名词

但不可否认,是Struts将MVC的理念深深渗透到了JAVA EE领域的
PS:Java SE的Swing大家就不用拿来讨论的吧
13 楼 depravedangel 2010-10-28  
KimHo 写道
ajax的引入,的确改变了传统mvc繁琐的开发模式
ZK框架,楼主可以借鉴下

ZK框架是这种思路比较好的一个实现,我个人觉得ZK框架更像Flex,前端全部采用自定义的XML来实现了(我并没有使用过ZK,只是大概了解过,可能观点不是很正确)

但还是有很多情况下还是采用传统的html的方式来实现的。从html的编程方式直接跳转到XML的编程方式,对于一个公司来来说,在执行上还是有很大的阻力的,人员的状况,早期的项目都是需要慎重考虑的。
12 楼 depravedangel 2010-10-28  
kjj 写道
mvc模式快念烂了,现在还有人思考它存在的意义,摆脱发帖前看看这些历史,那些鸟培训真是害人不浅啊!!

存在的都是合理的。培训跟写书等等一样,只是一种传道授业的方式,为什么在您看来会有贬低的意思?
PS:我没有接受过什么培训

相关推荐

    MVC模式和Struts框架

    MVC模式和Struts框架

    Struts 2 自定义MVC 框架

    自定义Struts 2 MVC框架的过程有助于深入理解其工作原理,从而更好地应用和优化项目。 首先,我们来详细探讨Struts 2的核心组件和它们的角色: 1. **模型(Model)**:模型是应用的核心,负责处理业务逻辑和数据。在...

    Struts和Spring两种MVC框架究竟有什么不同呢?

    Struts是Apache软件基金会的一个开源项目,它最初在2000年代初期流行起来,是Java社区中最早的MVC框架之一。Struts的核心是ActionServlet,它作为请求处理器,通过配置文件(struts-config.xml)来管理动作映射。...

    Struts开源MVC框架

    Struts开源MVC框架,让你更加了解Struts的开源框架的运用

    MVC原理(struts框架详解).

    MVC原理(struts框架详解), Struts 质上就是在Model2的基础上实现的一个MVC架构。它只有一个中心控制器,他采用XML定制转向的URL。采用Action来处理逻辑

    重构mvc实现struts框架

    **标题解析:** "重构mvc实现struts框架" 这个标题表明了我们要探讨的主题是关于软件开发中的重构过程,特别关注的是如何从一个简单的MVC(Model-View-Controller)模型出发,逐步演进到实现Struts框架的初步形态。...

    基于struts框架mvc模式应用的实现

    ### 基于Struts框架MVC模式应用的实现 #### 概述 本文主要探讨Struts框架在MVC(Model-View-Controller)模式下的应用实现,旨在为读者提供一个深入理解Struts框架及其在Web开发中作用的机会。通过详细解析MVC模式...

    基于MVC模式Struts框架

    Struts框架是一个成熟的开源MVC框架,它利用Servlet、JSP和自定义标签库等技术来实现MVC架构。Struts通过以下组件来实现MVC模式: - **ActionServlet**:作为控制器的核心,负责接收HTTP请求并将请求转发给适当的...

    基于MVC struts框架开发的小型WEB

    【标题】基于MVC Struts框架开发的小型WEB 在Web开发领域,MVC(Model-View-Controller)设计模式是一种广泛采用的架构,而Struts框架是Java平台上的一个实现MVC模式的重要工具。本项目是一个基于MVC Struts框架...

    MVC框架struts1.2.9

    Struts 1.2.9 是一个经典的Java Web开发框架,属于MVC(Model-View-Controller)架构模式的一种实现。MVC模式是软件工程中用于分隔应用程序数据逻辑、用户界面和应用流程控制的常见设计模式。在这个框架中,模型负责...

    MVC与Struts简介

    然而,随着新的技术如Spring MVC的出现,Struts2逐渐被许多开发者认为是过时的技术,因为它相对较重且配置较为繁琐,但作为一个历史性的技术,它对于理解现代Web框架的设计原理仍然具有重要意义。

    基于MVC的Struts框架初探

    ### 基于MVC的Struts框架初探:深入解析与应用 #### 引言:框架的意义与必要性 在JavaWeb应用的早期发展阶段,JSP文件扮演着多重角色,包括业务逻辑处理、控制流程管理以及HTML页面的生成。这种高度耦合的设计导致...

    MVC框架struts1.2.9源码

    Struts1.2.9是Apache软件基金会的一个开源项目,它是Model-View-Controller(MVC)设计模式在Java Web应用程序中的实现。...通过阅读源码,开发者还可以学习到如何设计和实现一个轻量级的MVC框架。

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    Struts、Spring MVC和Struts2是Java Web开发中三个重要的MVC框架,它们都用于构建基于模型-视图-控制器(MVC)设计模式的Web应用程序。下面将分别介绍这三个框架的工作原理,并进行对比。 **Struts1原理:** Struts...

    自定义类似struts的mvc框架

    在IT行业中,构建一个自定义的类似于Struts的MVC框架是一项挑战性的任务,它涉及到对Web开发模式的深入理解,以及对Java、JSP、XML解析等技术的熟练运用。Struts作为Java EE领域中著名的MVC框架,其设计思想和实现...

    JavaEE经典MVC框架Struts(代码测试通过)

    JavaEE经典MVC框架Struts是企业级应用开发中的一个重要组成部分,它为构建基于Web的应用程序提供了一种结构化的解决方案。MVC(Model-View-Controller)模式是一种设计模式,用于将应用程序的业务逻辑、用户界面和...

    论文研究-基于MVC模式的Struts框架的研究与应用 .pdf

    基于MVC模式的Struts框架的研究与应用,李梅,宋泽海,随着面向对象技术、Web技术和J2EE技术的发展,软件框架技术在Web开发中得到了广泛应用。Struts作为一个开源的Web层框架,是MVC及J2EE若干�

    基于MVC模式的Struts框架中Ajax研究与应用.pdf

    ### 基于MVC模式的Struts框架中Ajax研究与应用 #### 一、引言 随着互联网技术的发展,Web应用程序的需求日益增加,对于高效、可维护的应用框架的需求也愈发强烈。MVC(Model-View-Controller)设计模式作为构建Web...

    mystruts简易MVC框架实现 .

    "mystruts"是一个简化版的MVC框架,其设计灵感来源于经典的Struts1.x框架,旨在为开发者提供一个轻量级的解决方案,便于理解和实践MVC思想。 【描述】"实现mvc思想,部分代码参考struts1.x" MVC思想的核心在于将...

Global site tag (gtag.js) - Google Analytics