`
hypercube1024
  • 浏览: 85255 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2的性能为什么这么差,有性能测试截图

    博客分类:
  • java
阅读更多
最近觉得struts2性能感觉好差,然后就对struts2和springMVC3分别作了以下性能测试,结果太让人吃惊了!
机器配置是 T6600 + 2G内存

执行一条最简单的查询语句,500线程
select * from folder where fid = '1' order by orderNum

struts2 + spring3 + hibernate 的测试结果



struts2 + spring3 + mock对象的测试结果




spring3 MVC + hibernate 的测试结果




最后是spring3 MVC + jdbc 的测试结果



根据最后两种情况可以看到 hibernate 对性能的损失尚可接受,但是struts2的性能为什么和 spring3 MVC 差这么多 -_-b

最后附上struts2官方的helloWorld例子程序的测试结果





性能也不容乐观。。。。。。
这个是官方的helloworld例子使用的jar包如下
<dependencies>

		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.1.8.1</version>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.14</version>
		</dependency>

	</dependencies>


然后是我的 struts.xml 配置文件,log 也已经设置到 ERROR 级别
<struts>

	<constant name="struts.devMode" value="false" />

	<package name="basicstruts2" extends="struts-default">

        <!-- If no class attribute is specified the framework will assume success and 
        render the result index.jsp -->
        <!-- If no name value for the result node is specified the success value is the default -->
		<action name="index">
			<result>/index.jsp</result>
		</action>
		
		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
		If the result returned by the execute method is success render the HelloWorld.jsp -->
		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
			<result name="success">/HelloWorld.jsp</result>
		</action>

	</package>

</struts>


  • 大小: 11.6 KB
  • 大小: 13.2 KB
  • 大小: 11.6 KB
分享到:
评论
89 楼 Tracyer 2010-09-25  
kongxx 写道
一直不喜欢struts2

   同感,正在学习springMVC,发现很方便。。
88 楼 atianchen 2010-07-21  
我也是从webwork一直用上来的,spingmvc也有过亲密接触
没设么可吵的,各有千秋,根据项目实际需求和人员构成按需选择,springmvc更简洁,在model上的处理更合理
struts2其他什么拦截器之类的老腔调的不多说老,插件多呀,什么插件都有。不过其实springmvc一般的也都支持了,jasperreports freeamarker json,也够了,其实

另外 ,没有任何框架是一开始就会完全达到项目开发的要求,不仔细研究一下,做下扩展,就在盲目说XX肯定比XX好也是不负责的
87 楼 downpour 2010-06-06  
MrLee23 写道

struts2我的确没用他来开发过项目,因为我觉得struts2里面有的,springmvc都能做到,这就是我为什么没有正确使用struts2的原因,我建议你可以去尝试使用springmvc.
恕我直言,在我的印象里springmvc远远大于struts,因为spring有一站式服务并且从各个角度方面看都远比struts好很多,就是这么简单.

如果你知道struts2的强悍功能,在我们项目中必须用到的,也请你详细的例举出来,这样也方便大家对struts2与spring有一个正确的认识和理解.


作为一个从Webwork就开始进行web开发,并在Spring还在1.2版本时就开始试用springmvc的人,我认为我对待这两个框架的评价要比没有用过struts2的人更加客观一些。

SpringMVC在Spring2.5以后,有了比较大的改变,但是就Web开发的效率上,比起Struts2而言还要差上很大一截,这不是一个人凭借印象就能评述的。

Struts2的效率问题我已经说得比较清楚。从响应速度上它不及基于传统Servlet模式的MVC框架,在内存占用上也是大大的超过,其本质原因都是它自身的设计层次的问题,获得的好处是开发的便利。所以期望能够获得高响应速度,低资源消耗的系统请使用基于Servlet的MVC框架。
86 楼 zhangchengtian66 2010-06-06  
请问一下楼主是用什么工具测试的,能否告知,谢谢,吞吐量是怎么测试的,
有没有好的办法测试java 虚拟机占的内存和cup情况
85 楼 xiaoych 2010-06-04  
看不出来哪里是性能瓶颈嘛  
84 楼 zzitt 2010-06-04  
这些问题值得思考。也有可能是测试比较片面,多做些性能测试为好
83 楼 MrLee23 2010-06-03  
downpour 写道
MrLee23 写道
struts2我承认的确有很多强悍的功能,但是这些功能在实际项目中很少用到,就算用到,我想我们也会考虑其他的方式来实现吧,struts2用来做控制层跳转,虽然这个功能在大家的眼里是很一般的,但是别望了,我们用struts的起初目的就是这个很一般的功能,至于什么线程安全,我想spring中就能做到吧,因为我一直在用spring来做struts2的那种线程安全,而且用来也很优雅,可以选择有的action使用可以选择不使用,甚至你可以设置ThreadLocal到哪一个级别,是reuqest,还是session等~让你自己掌控控制层上的性能~
个人觉得,struts2其他的那些强悍的功能,我想是用来宣传struts2的一个卖点吧,如果没有亮点,谁又会去关注呢?~就像微软的sql server的例子一样,他那例子实际很少用到,可以说不是DBA基本不会去用,那他为什么还要去写这样的例子呢?~就是让其他人知道sql server还有亮点,让其他人不要去用oracle,其实是一个道理,一个好的框架,是让你控制的省心,用起来舒心,运行起来放心的~
我还是期待struts2的更新版本,希望能让我们把strusts2掌控在手中~希望强过与springmvc~
以上为个人的遇见,欢迎大家讨论~

补充一下,struts2的action做测试还是很好做的~因为action脱离servlet的api,所以测试起来很方便,赞一个~


又来了个理论派。

居然告诉我struts2提供的强悍的功能我们在实际项目中很少用到。不知道你写过多少Web程序,请你告诉我,没有struts2的时候,你是怎么处理从页面上传递过来的参数的?

ThreadLocal模式出现在框架中可以被理解,但是在代码中显式使用一定是一个反模式,不知道你到底在什么样的情况下才会用到ThreadLocal来实现线程安全。

我认为你还没有正确使用struts2,所以这样的评论缺乏根据。

struts2我的确没用他来开发过项目,因为我觉得struts2里面有的,springmvc都能做到,这就是我为什么没有正确使用struts2的原因,我建议你可以去尝试使用springmvc.
恕我直言,在我的印象里springmvc远远大于struts,因为spring有一站式服务并且从各个角度方面看都远比struts好很多,就是这么简单.

如果你知道struts2的强悍功能,在我们项目中必须用到的,也请你详细的例举出来,这样也方便大家对struts2与spring有一个正确的认识和理解.
82 楼 hypercube1024 2010-06-02  
说到线程安全,单例的情况下,不修改类里面变量即可,全部使用方法参数传递。
81 楼 downpour 2010-06-02  
MrLee23 写道
struts2我承认的确有很多强悍的功能,但是这些功能在实际项目中很少用到,就算用到,我想我们也会考虑其他的方式来实现吧,struts2用来做控制层跳转,虽然这个功能在大家的眼里是很一般的,但是别望了,我们用struts的起初目的就是这个很一般的功能,至于什么线程安全,我想spring中就能做到吧,因为我一直在用spring来做struts2的那种线程安全,而且用来也很优雅,可以选择有的action使用可以选择不使用,甚至你可以设置ThreadLocal到哪一个级别,是reuqest,还是session等~让你自己掌控控制层上的性能~
个人觉得,struts2其他的那些强悍的功能,我想是用来宣传struts2的一个卖点吧,如果没有亮点,谁又会去关注呢?~就像微软的sql server的例子一样,他那例子实际很少用到,可以说不是DBA基本不会去用,那他为什么还要去写这样的例子呢?~就是让其他人知道sql server还有亮点,让其他人不要去用oracle,其实是一个道理,一个好的框架,是让你控制的省心,用起来舒心,运行起来放心的~
我还是期待struts2的更新版本,希望能让我们把strusts2掌控在手中~希望强过与springmvc~
以上为个人的遇见,欢迎大家讨论~

补充一下,struts2的action做测试还是很好做的~因为action脱离servlet的api,所以测试起来很方便,赞一个~


又来了个理论派。

居然告诉我struts2提供的强悍的功能我们在实际项目中很少用到。不知道你写过多少Web程序,请你告诉我,没有struts2的时候,你是怎么处理从页面上传递过来的参数的?

ThreadLocal模式出现在框架中可以被理解,但是在代码中显式使用一定是一个反模式,不知道你到底在什么样的情况下才会用到ThreadLocal来实现线程安全。

我认为你还没有正确使用struts2,所以这样的评论缺乏根据。
80 楼 humaeks 2010-06-02  
八页的帖子,居然没人说struts2因为是使用instance-per-request的因此会导致大量的短生命周期对象产生而需要对jvm参数调整。

struts2的default interceptor stack你会哭的,按需裁剪吧。

慢,一个quick start的东西,根本都没榨过性能,这些不带参考价值的。

有不看架构,不看设计直接调性能的么。
79 楼 MrLee23 2010-06-02  
hypercube1024 写道
其实是这样,在一个项目中盲目的引入一大堆的开源库是很不负责任的,动辄一个项目jar包就好几十MB,然后弄得很混乱,而且框架本身的Bug会造成一些不确定因素,像Spring Hibernate以前都遇到过很多Bug,再官方的论坛寻求帮助和查找问题花了大量的时间和精力,不过由于这些项目还是比较活跃的,所以很快就修复了。我个人觉得一个项目中引入的库还是越少越好,除非一些确实完成不了的任务才引入开源库,比如 全文搜索 缓存 生成Excel 这些比较复杂任务才加入 Lucene Ehcache jxl 这样的jar包。现在项目里面引入的jar最多也不超过10MB。


这个就跟架构有关系了,建议去看看系统架构方面的资料,用什么样的框架,怎么用,用多少,这些是根据实际的需求来决定的,不是一成不变的~


推荐大家看一个文章,个人觉得写的还是不错的,回复的帖子也很精彩,有兴趣的可以去瞧上两眼
http://www.iteye.com/topic/646240
78 楼 hypercube1024 2010-06-02  
其实是这样,在一个项目中盲目的引入一大堆的开源库是很不负责任的,动辄一个项目jar包就好几十MB,然后弄得很混乱,而且框架本身的Bug会造成一些不确定因素,像Spring Hibernate以前都遇到过很多Bug,再官方的论坛寻求帮助和查找问题花了大量的时间和精力,不过由于这些项目还是比较活跃的,所以很快就修复了。我个人觉得一个项目中引入的库还是越少越好,除非一些确实完成不了的任务才引入开源库,比如 全文搜索 缓存 生成Excel 这些比较复杂任务才加入 Lucene Ehcache jxl 这样的jar包。现在项目里面引入的jar最多也不超过10MB。
77 楼 MrLee23 2010-06-02  
downpour 写道
MrLee23 写道
struts2看起来的确很优雅,struts2我想我就用他来做控制层跳转使用,真想不出来还能用他干什么了,毕竟现在很多都是框架的整合集成之类的,所以struts2应该考虑到这个问题了吧~如果struts2没考虑到与其他框架的整合,我想这是他的一个失败的地方~
个人愚见,struts2思想不错,但是性能有待提高~
说道性能,我想这个应该是一个潜伏的炸 弹吧,不爆 炸一点事没有,如果一旦爆 炸,我们是不是应该考虑脱离掉struts2改用其他的呢?~
这个分析的帖子不错,继续关注,我一直没上struts2的框架,我觉得struts2的那些华丽的功能,不至于让我舍弃现在的框架来更换他,除非有一天,strusts2性能,功能上超过了我现在使用的框架,我可能会考虑替换~


struts2用来做控制层跳转?这是它最弱的功能了。

要说到和其他框架的整合,struts2才是web层框架中最强的,你见过有哪个web层框架现在整合其他框架用的是plugin形式?只要一个jar包就完全搞定了。这还能叫失败?那么我看不到成功的东西了。

struts2的核心是xwork,因为用到了ThreadLocal模式,所以那些Web容器中的对象会跟着当前Thread一跟到底,所以造成了struts2是很占用内存的,尤其是高并发的情况下,如果request的生命周期很长,你会看到内存不断上升。这个是struts2在性能上的一个问题,但是这个却能支撑起其他web框架无法支持的功能。

至于struts2的响应速度为什么不如springmvc或者其他的一些mvc框架来的快,这个也和自身的设计有关。struts2为每个响应都创建一个Action,并保证这个Action是线程安全的对象。但是其他的mvc框架,却还是基于servlet模式的,无法做到线程安全。所以我估计struts2在创建Action以及Action的执行环境中花费了比较多的时间,但是这个并没有什么数据上的支持,如果有时间,我倒是愿意来做一个测试,比较一下struts2和springmvc在响应一个web请求时,各个处理类之间的执行时间的比较。

像楼主这样子贴图,其实没有意义。因为你无法证明你的测试是标准的。而且,响应速度慢,需要分析其本质原因,而不是一概报怨,否则任何框架都会变得失去它的意义。


struts2我承认的确有很多强悍的功能,但是这些功能在实际项目中很少用到,就算用到,我想我们也会考虑其他的方式来实现吧,struts2用来做控制层跳转,虽然这个功能在大家的眼里是很一般的,但是别望了,我们用struts的起初目的就是这个很一般的功能,至于什么线程安全,我想spring中就能做到吧,因为我一直在用spring来做struts2的那种线程安全,而且用来也很优雅,可以选择有的action使用可以选择不使用,甚至你可以设置ThreadLocal到哪一个级别,是reuqest,还是session等~让你自己掌控控制层上的性能~
个人觉得,struts2其他的那些强悍的功能,我想是用来宣传struts2的一个卖点吧,如果没有亮点,谁又会去关注呢?~就像微软的sql server的例子一样,他那例子实际很少用到,可以说不是DBA基本不会去用,那他为什么还要去写这样的例子呢?~就是让其他人知道sql server还有亮点,让其他人不要去用oracle,其实是一个道理,一个好的框架,是让你控制的省心,用起来舒心,运行起来放心的~
我还是期待struts2的更新版本,希望能让我们把strusts2掌控在手中~希望强过与springmvc~
以上为个人的遇见,欢迎大家讨论~

补充一下,struts2的action做测试还是很好做的~因为action脱离servlet的api,所以测试起来很方便,赞一个~
76 楼 downpour 2010-06-02  
MrLee23 写道
struts2看起来的确很优雅,struts2我想我就用他来做控制层跳转使用,真想不出来还能用他干什么了,毕竟现在很多都是框架的整合集成之类的,所以struts2应该考虑到这个问题了吧~如果struts2没考虑到与其他框架的整合,我想这是他的一个失败的地方~
个人愚见,struts2思想不错,但是性能有待提高~
说道性能,我想这个应该是一个潜伏的炸 弹吧,不爆 炸一点事没有,如果一旦爆 炸,我们是不是应该考虑脱离掉struts2改用其他的呢?~
这个分析的帖子不错,继续关注,我一直没上struts2的框架,我觉得struts2的那些华丽的功能,不至于让我舍弃现在的框架来更换他,除非有一天,strusts2性能,功能上超过了我现在使用的框架,我可能会考虑替换~


struts2用来做控制层跳转?这是它最弱的功能了。

要说到和其他框架的整合,struts2才是web层框架中最强的,你见过有哪个web层框架现在整合其他框架用的是plugin形式?只要一个jar包就完全搞定了。这还能叫失败?那么我看不到成功的东西了。

struts2的核心是xwork,因为用到了ThreadLocal模式,所以那些Web容器中的对象会跟着当前Thread一跟到底,所以造成了struts2是很占用内存的,尤其是高并发的情况下,如果request的生命周期很长,你会看到内存不断上升。这个是struts2在性能上的一个问题,但是这个却能支撑起其他web框架无法支持的功能。

至于struts2的响应速度为什么不如springmvc或者其他的一些mvc框架来的快,这个也和自身的设计有关。struts2为每个响应都创建一个Action,并保证这个Action是线程安全的对象。但是其他的mvc框架,却还是基于servlet模式的,无法做到线程安全。所以我估计struts2在创建Action以及Action的执行环境中花费了比较多的时间,但是这个并没有什么数据上的支持,如果有时间,我倒是愿意来做一个测试,比较一下struts2和springmvc在响应一个web请求时,各个处理类之间的执行时间的比较。

像楼主这样子贴图,其实没有意义。因为你无法证明你的测试是标准的。而且,响应速度慢,需要分析其本质原因,而不是一概报怨,否则任何框架都会变得失去它的意义。
75 楼 唯快不破 2010-06-02  
楼主有时间顺便也做下play!和spring3mvc的性能测试对比吧,play也是一个支持REST的web框架
74 楼 MrLee23 2010-06-02  
struts2看起来的确很优雅,struts2我想我就用他来做控制层跳转使用,真想不出来还能用他干什么了,毕竟现在很多都是框架的整合集成之类的,所以struts2应该考虑到这个问题了吧~如果struts2没考虑到与其他框架的整合,我想这是他的一个失败的地方~
个人愚见,struts2思想不错,但是性能有待提高~
说道性能,我想这个应该是一个潜伏的炸 弹吧,不爆 炸一点事没有,如果一旦爆 炸,我们是不是应该考虑脱离掉struts2改用其他的呢?~
这个分析的帖子不错,继续关注,我一直没上struts2的框架,我觉得struts2的那些华丽的功能,不至于让我舍弃现在的框架来更换他,除非有一天,strusts2性能,功能上超过了我现在使用的框架,我可能会考虑替换~
73 楼 java_world 2010-06-01  
企业应用 用struts2没撒 问题啊 我们的几个项目用也还好。
72 楼 downpour 2010-06-01  
hypercube1024 写道
downpour 写道
所以结论就是楼主应该放弃使用Struts2,投入SpringMVC的怀抱。

不过我对这个测试挺有兴趣,到达了什么样的标准,可以被楼主定义为“这么差”?


插件确实会影响性能,光使用 struts2-core vs struts2 + spring 性能好上2-3倍。但是和 springMVC 比 差 2-3倍。

最后再准备测试一下 Servlet 的结果,如果 Servlet 性能比 springMVC 好2倍以上的话,就直接用 Servlet 了,对性能要求比较高


这么说我就完全理解了。说白了就是说,你的系统对响应的要求很高。那最好就是什么都不要用,直接使用原生的Servlet。

Struts2的还有一个问题是耗内存。你可以做做这方面的测试,造福一下大家。
71 楼 Qiao.Gbin 2010-06-01  
性能差很多,但是有很多可以优化的地方,ognl要合理利用哦
70 楼 hypercube1024 2010-06-01  
downpour 写道
所以结论就是楼主应该放弃使用Struts2,投入SpringMVC的怀抱。

不过我对这个测试挺有兴趣,到达了什么样的标准,可以被楼主定义为“这么差”?


插件确实会影响性能,光使用 struts2-core vs struts2 + spring 性能好上2-3倍。但是和 springMVC 比 差 2-3倍。

最后再准备测试一下 Servlet 的结果,如果 Servlet 性能比 springMVC 好2倍以上的话,就直接用 Servlet 了,对性能要求比较高

相关推荐

    struts2测试工具

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。...无论这个"鬼哥struts2测试工具.exe"具体是什么,理解并掌握Struts2的测试原理和最佳实践都是每个Struts2开发者必备的技能。

    struts2测试案例

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的MVC(Model-View-Controller)架构的应用程序。它建立在Apache Jakarta的.struts1之上,并吸取了其他框架的优点,如WebWork,提供了更丰富...

    struts2项目开发

    Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...

    Struts2与Struts1区别

    相比之下,Struts2 为每个请求创建一个新的 Action 实例,避免了线程安全问题。 3. **对 Servlet API 的依赖**: - Struts1 的 Action 直接依赖于 Servlet API,请求和响应对象会传入 execute 方法。而 Struts2 ...

    Struts2全部jar包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,为开发者提供了构建可维护、可扩展的Web应用程序的结构。本资源包含的"Struts2全部jar包"是搭建Struts2项目的基础,确保了所有必要的...

    struts2所用到的jar包

    10. **测试支持**:Struts2提供了测试框架,如Struts2 TestNG插件,方便进行单元测试和集成测试,确保应用的正确性。 综上所述,Struts2的核心包和IO包是构建基于Struts2的应用程序不可或缺的部分,它们为开发者...

    Migrating From Struts1 To Struts2

    Struts2以其更加灵活的设计、丰富的特性以及更好的性能表现成为众多开发者的首选。本文将深入探讨如何从Struts1平稳过渡到Struts2,并分析两者之间的主要差异。 #### Struts1概述 Struts1是基于Java的开源Web应用...

    Struts2——教程

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Struts1的基础上进行了很多改进和增强,提供了更强大的功能和更好的性能。本教程将深入探讨Struts2的核心概念、架构以及实际...

    struts2 lib包

    2. **Struts2 Plugins**: Struts2支持多种插件来扩展其功能,例如Struts2-convention-plugin(基于约定的配置)、Struts2-dojo-plugin(提供Dojo JavaScript库的支持)、Struts2-json-plugin(支持JSON数据格式)。...

    Struts2 in action(struts2实战)

    - 拦截器栈是Struts2处理请求的关键,通过组合不同的拦截器,可以实现复杂的功能,如登录检查、异常处理、性能监控等。 - 自定义拦截器可以通过继承`com.opensymphony.xwork2.interceptor.Interceptor`接口实现。 ...

    struts1和struts2区别

    - **Struts2**:Action对象为每个请求创建一个新的实例,消除了线程安全问题,提高了性能。 3. **Servlet依赖**: - **Struts1**:Action直接依赖于Servlet API,需要HttpServletRequest和HttpServletResponse...

    Struts2漏洞2.0.xx升级为Struts-2.5.12步骤

    在Struts2的早期版本中,尤其是2.0.xx和2.3.28.1,存在一个名为CVE-2017-9791的安全漏洞,这是一个远程代码执行(RCE)漏洞,攻击者可以利用它来运行恶意代码,对服务器造成严重危害。因此,及时升级到修复了这些...

    Struts2的由来

    总的来说,Struts2是结合了Struts 1的广泛采纳和WebWork的创新设计的产物,它通过提供非侵入式设计、强大的数据绑定和可扩展的拦截器机制,为Java Web开发者提供了一个更高效、灵活的开发平台。

    Struts2-2.2.1

    Struts2-2.2.1作为一个基础版本,为开发者提供了稳定的开发平台,同时也为后续版本的更新和发展奠定了基础。在实际开发中,了解并掌握Struts2的核心概念和使用方法,有助于提升Web应用的开发效率和质量。

    struts2,spring

    4. **AOP集成**:Spring AOP可以与Struts2的拦截器一起工作,实现更细粒度的功能,如性能监控、日志记录等。 5. **数据访问**:Spring支持多种数据访问技术,如JDBC、Hibernate、MyBatis等,可以方便地与Struts2...

    struts2简单模拟

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的Web应用程序。它在Web开发领域中被广泛使用,特别是在企业级应用中,因为它提供了MVC(Model-View-Controller)设计模式的实现,有助于...

    struts2升级到Struts2 2.3.32相关jar包

    这包括单元测试、集成测试以及性能测试,确保升级没有引入新的错误或问题。 7. **回滚计划**:在进行升级之前,最好备份当前的工作环境,以便在升级出现问题时可以快速回滚到旧版本。 8. **文档更新**:更新项目...

    struts2核心包

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的MVC(Model-View-Controller)架构的应用程序。它是在经典的Struts 1框架基础上发展起来的,旨在提供更优雅、灵活和可扩展的解决方案。...

    struts 2教程资料

    2. **配置文件**:Struts 2使用XML配置文件(通常为struts.xml)来定义Action类、结果页面以及拦截器等。配置文件允许开发者声明性地设置URL映射和处理流程。 3. **拦截器**:拦截器是Struts 2的一个强大特性,它们...

    struts2 发布包

    1. **发布时间**:Struts2 1.3.9发布于2007年,那时的Web开发环境与现在有很大差异,安全性和性能方面可能没有现代版本那么完善。 2. **API限制**:相比后续版本,1.3.9的API可能较为有限,某些功能可能尚未引入或...

Global site tag (gtag.js) - Google Analytics