`

struts2 使用之我见

阅读更多

struts2 使用之我见
Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以说是大红大紫,从开发人员的角度来分析,Struts2之所以能够如此的深入开发人员之心,与其优良的设计是分不开的。
下面我从使用Struts2一年之久的经验来分析一下Struts2的优点:
1. Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。
我在项目开发过程中,一个具体的功能的开发流程是:
  • 拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),
  • 分析需要从前台传递哪些参数,确定参数的变量名称,在Action中设置相应的变量,
  • 这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,
  • 编写Action对应的方法来完成业务逻辑,
  • 最后,做一些与配置文件相关的设置。

当然实际的开发比这个过程要复杂,涉及到数据库,验证,异常等处理。但是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。

2. 使用OGNL进行参数传递。
OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。

3. 强大的拦截器
Struts2的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。

4. 易于测试
Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。

5. 易于扩展的插件机制
在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。常用的Struts2的扩展可以通过这个链接找到:

6. 模块化
Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:
  1. 将配置信息拆分成多个文件
  2. 把自包含的应用模块创建为插件
  3. 创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。

7. 全局结果与声明式异常
为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面,这一功能十分实用。

Struts2的优点有很多,欢迎交流讨论。

分享到:
评论
53 楼 nearboy 2010-03-26  
ustcfxx 写道
炫速飞火 写道
struts2现在很多公司还是没用,struts1已经停产了,感觉struts2能高手变的更聪明,让低手变的越来越笨,用struts2还是要看里面底层的东西怎么套用的

是的,基本功也是很重要的,做Web开发,至少要知道servlet,request,session,cookie,filter这些东西是什么吧。

Struts2 拦截器,在大型项目中用的不多吧!
52 楼 maliang.scut 2010-03-17  
accphc 写道
Struts2中我最疑惑的是类型转换和输入校验,问题如下:
1、对于一个int型的字段(比如年龄1-100之间合法),用户输入非数字内容,类型转换为0,然后再进行输入校验,发现0非法,那么到了界面上就提示用户两个信息,一个类型转化错误信息,一个范围错误信息。如果用户输入的时候就输入0,那怎么判断?
2、类型转换和输入校验的顺序问题,为什么先进行类型转换再进行输入校验呢。我一开始就进行输入校验,对于不合法就直接给用户提示错误,不再进行类型转换,比如输入了非数字错误。
本人愚钝,望指教。


对于问题1. 我曾经用过一段时间的Struts2,印象中,对于一个int类型,如果输入的是非数字,比如"a",那么在类型转换的时候会抛Parse异常。

51 楼 accphc 2010-03-17  
Struts2中我最疑惑的是类型转换和输入校验,问题如下:
1、对于一个int型的字段(比如年龄1-100之间合法),用户输入非数字内容,类型转换为0,然后再进行输入校验,发现0非法,那么到了界面上就提示用户两个信息,一个类型转化错误信息,一个范围错误信息。如果用户输入的时候就输入0,那怎么判断?
2、类型转换和输入校验的顺序问题,为什么先进行类型转换再进行输入校验呢。我一开始就进行输入校验,对于不合法就直接给用户提示错误,不再进行类型转换,比如输入了非数字错误。
本人愚钝,望指教。
50 楼 birdbiena 2010-03-09  
ustcfxx 写道
aiyanbo 写道
大哥(不知道叫你大哥还是什么的叫你前辈吧)

我是90后的程序员了,目前在学习struts2 想问你下

从数据库获得一个 pojo的list 在界面上显示要转成 vo 形式的list 吗?

我是80后,不必客气。
如果不涉及Hibernate延迟加载这些问题,只是显示list中的值,使用<s:iterator>等struts2控件可以方便做到。


请问一下,你说问的不涉及Hibernate延迟加载这些问题,如果涉及了用什么办法或方法,在有一个问题是,你应该是经长在Struts2+Json+Jquery上做的人,我想问一下,你对于Hibernate的延迟加载你有什么经验,交流一下
49 楼 sgzlove2007 2010-03-09  
JSF的view做得感觉比STRUTS2要好些,个人观点
48 楼 sgzlove2007 2010-03-09  
struts2也有些地方做得不好,比如:页面的一些标签它自己都加了一些元素进去,搞得不是那么好控制格式样式什么的
47 楼 zhongxinhu 2010-03-09  
楼主总结的好!
46 楼 tiger888 2010-01-09  
总结的不错,Struts2是个简单的框架,比较精炼,入门也快,这也是流行很快、很广的原因吧。个人感觉JSF体系要好一些,真正的基于OO的MVC,尽管struts2也杜绝转向OO,但这种请求-响应机制有时给开发状态管理的一些东西带来不少复杂度。
关系JSF的来看我的BLOG吧。
45 楼 zhaoliaoyuan 2009-12-24  
sturts2有什么插件可以更好的上传视频文件吗!
在用sturts2上传大型文件时总是出错,找不到路径,主要是它上传是单点的,不知道可以可以实现断点上传,webwork虽然可以上传视频,但好像也是单点上传。
44 楼 sqdjava 2009-12-18  
struts2的背景确实是很扎实很可靠,相对于新框架来说是一个比较成熟的框架,现在正在学习当中,本人只限于有点stuts1的基础,因此还是有点吃力的,毕竟struts2还是应用了比较多webwrk的技术,看了楼主的总结,说得很好,个人发现想要学好以灵活的用struts2,还得去学习它深处的一些知识,比如webwork,ojnl,其源码里的方法,等等等。。。。。
43 楼 wujiazhao88 2009-12-10  
Struts2的核心就是拦截器了
42 楼 huqing 2009-12-10  
還  可以
41 楼 金家寶 2009-12-09  
回帖的页数太多了。有时间在过来看看,
谢谢楼主的心得,刚刚开始学习S2
看来还有段路要走。
40 楼 fejay 2009-12-09  
struts2的确不错,开发效率提高了。
我们公司已经在用了
39 楼 harbey 2009-12-08  
感觉还不太成熟,我用的是2.5版本,多少有一些小的bug!
例如1:
<s:url id="demo" action="demo.do">
  <s:param name="" value=""></s:param>
</s:url>
这里的param不支持动态生成;
例如2:
<a:form action="demo.do?demoid=15">
  <s:submit value="提交"/>
</a:form>
这样提交不了demoid=15,查看生成的html源码,很奇怪,生成的html类似如下:
<form name="demo.do?demo=15" action="demo.do">
</form>
38 楼 luckaway 2009-12-07  
cnlw1985 写道
个人感觉struts2的标签用着不爽,还是喜欢JSTL

推荐用模板,freemarker or veloctity


37 楼 NumbCoder 2009-12-07  
geweixin 写道
ustcfxx 写道
nurenok 写道
LZ很帅

呵呵,谢谢。

,套用网易经典回复:害我又多看了一遍。嗯,确实挺帅~~~

我觉得还不是太成熟,有些不应该出现小bug
36 楼 ustcfxx 2009-12-07  
aiyanbo 写道
大哥(不知道叫你大哥还是什么的叫你前辈吧)

我是90后的程序员了,目前在学习struts2 想问你下

从数据库获得一个 pojo的list 在界面上显示要转成 vo 形式的list 吗?

我是80后,不必客气。
如果不涉及Hibernate延迟加载这些问题,只是显示list中的值,使用<s:iterator>等struts2控件可以方便做到。
35 楼 haole 2009-12-07  
如果使用spring,还是用spring mvc好
34 楼 aiyanbo 2009-12-07  
大哥(不知道叫你大哥还是什么的叫你前辈吧)

我是90后的程序员了,目前在学习struts2 想问你下

从数据库获得一个 pojo的list 在界面上显示要转成 vo 形式的list 吗?

相关推荐

    struts2所总结

    struts2 使用之我见 Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以...

    Struts2最新漏洞升级2.3.32版本

    struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar xwork-core-2.3.32.jar 2、删除上面原有的低版本jar 3、修改 WEB-INF\classes 目录下struts.xml 文件,...

    Struts2、Spring和Hibernate应用实例.

    现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过...

    【Struts2】〖所有依赖jar包〗struts-2.3.37-lib

    【Struts2】〖所有依赖jar包〗struts-2.3.37-lib 我寻见一片海 碧蓝且耀着光 大片船只航行其上 都向着远方 Shared by Foriver_江河 © 1997-8023 江河 All Rights Reserved.

    配置struts2常见错误

    本文将详细探讨配置Struts2时常见的错误及其解决方案。 #### 1. Console 错误:Exception starting filter struts2 **问题描述**: ``` Nomapping found for dependency[type=...

    struts2标签用法(详情见附件)

    使用Struts2标签时,开发者需要注意以下几点: - 标签需要放在`&lt;s:head&gt;`或`&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;`引入标签库之后。 - 每个标签都有对应的属性,例如`s:property`的`value`属性就是指定要显示...

    Struts2基本框架搭建jar包

    使用的jar包见附件strutsSimple.rar web.xml里面需要配置的项目 &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter &lt;filter-mapping&gt; ...

    Struts2学习示例

    8、struts2基本标签的使用 9、struts2的Action实现,其中用到了两种方法 (1)UserAction类是比较方便的方法,本系统就只用到了UserAction类 (2)AddUserAction、DeleteUserAction、ViewUserAction是另外一种实现,...

    【Struts2】〖基本依赖jar包〗struts-2.3.37-min-lib

    【Struts2】〖基本依赖jar包〗struts-2.3.37-min-lib 我寻见一片海 碧蓝且耀着光 大片船只航行其上 都向着远方 Shared by Foriver_江河 © 1997-8023 江河 All Rights Reserved.

    struts2学习笔记和源码

    提供的源码可能包含了一些基础的Struts2应用实例,例如用户登录、注册、CRUD操作等,这些都是学习Struts2时常见的应用场景。 通过深入学习这份资料,你不仅可以理解Struts2的基本概念和机制,还能通过源码实践加深...

    Struts2+jdbc+mysql 实现简单的增删改查(源码+jar包)

    该资源非常适合刚接触struts2的小伙伴,里面有源码个匹配的Struts2的jar包,使用方法见readme.txt。 另外提交数据后,如遇到乱码,请参考: http://blog.csdn.net/xp871038951/article/details/78322799

    Struts2+Spring2+Hibernate3 web应用示例

    现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过...

    struts2part2

    struts2part2,由于文件太大无法一次上传,分成两部分,请用文件合并工具进行合并。文件合并工具见本人资源。

    struts2+hibernate学习示例

    目的:构建struts2开发框架 使用 Hibernate作为持久层操作 适合:有一定struts2基础 实现:通过对用户信息的基本操作来给大家做个示范 1、struts2的搭建 2、web.xml文件的简单配置 3、struts.xml文件的简单配置 4...

    技术我之见----struts

    - Struts1的设计模式较为陈旧,现在更多人倾向于使用更新的Struts2或Spring MVC。 五、实际开发应用 在实际开发中,Struts可以与其他技术结合,如Hibernate用于持久化,Spring进行依赖注入和事务管理,构建完整的...

    struts2+Hibernate+Spring学习示例

    目的:构建struts2开发框架 使用 Hibernate作为持久层操作 采用Spring容器 适合:有一定struts2基础 对Hibernate有一定的了解 对Spring有一定的知识 实现:通过对用户信息的基本操作来给大家做个示范 1、struts2的...

    struts2+spring+hibernate整合示例

    SSH整合示例(详情见我博客专栏)之前的博客我们总结了spring基础、spring分别整合struts2、hibernate、mybatis等,今天我们来同时整合下 struts、spring、hibernate,也就是所谓的 ssh 。 整合流程: 1 首先整合...

    struts2教程

    - Struts2在配置和使用上与Struts1.x有较大区别。 - Struts2基于WebWork框架构建,继承了WebWork的优点并加以改进。 - 在技术架构上,Struts2更加灵活且易于扩展。 #### 二、Struts2基本程序构建流程 **知识点5...

    Bug管理系统 struts2+sping2.5+hibernate3(2-2)

    2 JDK5.0及以上版本. 3 ECLIPSE3.2 及以上版本. 4 MySQL5.0 注意事项: 1 TOMCAT安装路径中请不要包含中文字符,否则程序将不能正常运行. 目录及文件: debug\document PDM及数据库脚本。 作者留言: 本程序是作者...

    struts2-sunspoter-stream-1.1.jar

    添加struts2-sunspoter-stream-1.1.jar,该版本适用的范围: 1.JDK 1.4.2 2.J2EE 1.4 功能见http://sunspot.blog.51cto.com/372554/474983

Global site tag (gtag.js) - Google Analytics