hantsy 写道
在 Webwork 合并到Apache Struts项目,曾经对它的期望很大,后来使用后才知道失望更多。
直到现在,Struts2 一个最基本的问题就是对Java标准响应太慢。
这个和Struts2自身的设计有很大的关系。对于一个高度解耦的系统来说,对于Java标准的响应,Struts2全部都理解为可以以Plugin的形式插入到主系统。因此,Struts2对于其核心运行平台的技术升级始终步子迈的不够大。
hantsy 写道
1. 2.X 对Annotation的支持,比 Spring MVC 晚了至少 2年了。相对 Spring MVC,Stripes等框架,Struts 的Annotation可以说是 XML配置的Translation,根本没体现COC(Convention Over Configuration)。
Annotation的支持是以插件形式出现的,但是一直没有一个完整的官方版本。CoC倒是有,不过做得比较弱智一点。
我想强调一下的是,对于配置这个层面,官方迟迟没有给出最为完整的Annotation或者CoC支持的本质原因是其初始化程序中初始化容器的处理架构的缺陷。这个缺陷来自于Webwork时代,至今都没有得到改进。
因为Struts2所定义的配置结构是一个以namespace为中心的Map结构。因此,如果有多个不同的配置源,例如来自XML的,来自Annotation的,甚至来自于CoC的,最终都会在初始化时融合在一起。一旦这些配置源中含有相同的namespace下的众多配置,那么Struts2就无法正确处理。目前市面上所有的插件都采取了回避的措施,使用Unknownhandler的方法来进行处理,不仅效率降低,而且并没有从本质上解决问题。
hantsy 写道
2. 2.x 对Rest的支持相对 Spring MVC来说,可以说弱智,虽然它出了rest1,rest2 两个插件。对于现在的Web程序要求 Rest支持是很常见的。
这个问题也来自于Struts2对于请求映射设计的缺陷。Struts2对于请求的映射最终以一个叫做ActionMapping的类来表述。这个类天然就没有考虑到许多Restful的需求。而构造这个ActionMapping的实现却只是一个非常简单的接口ActionMapper,那么可想而知,ActionMapper的众多实现类要实现Rest实在是一个很困难的事情。更何况实现Rest最好是和配置结构结合起来,光靠一个接口,是很有难度的。
hantsy 写道
3. 直到最近 2.3.1 才支持 JSR330,而Spring 已经支持两年多了。
4. 目前还不支持JSR 303,虽然有第三方,但不是Out of box的,Spring MVC支持得很好。
JSR330和JSR303都可以以插件的形式加入到Struts2中,这个我认为都不是很大的问题。只不过插件的作者水平有高有低,官方没有出正式的支持倒是一个值得商榷的地方。
分享到:
相关推荐
在《hibernate-spring-struts整合手册》中,作者Hantsy Bai旨在展示如何结合strutsMVC框架、Spring中间层以及Hibernate后端技术,共同构建一个名为“MyUsers”的简单三层架构Web应用程序。此程序将实现基本的CRUD...
git clone https://github.com/hantsy/struts-tutorial.git 在根文件夹中,它包含一个ODT文档,该文档包含创建示例代码的详细步骤。 该文件是用中文写的。 回馈 几年前,我已经放弃了Apache Struts1,所以我将不...
【标题】"hantsy.github.io:个人网站" 指的是一个个人网站,它是由用户hantsy在GitHub上创建并托管的。GitHub是一个面向开源及私有软件项目的托管平台,尤其适合进行版本控制和协作。个人网站通常用于展示个人作品、...
在《Spring快速入门》一文中,作者Hantsy Bai引导我们通过一系列步骤,从零开始搭建一个基于Spring的三层架构Web应用,名为"MyUsers"。该应用使用Struts作为MVC框架的前端,Spring作为业务逻辑层,而Hibernate作为...
git clone https://github.com/hantsy/angular-spring-reactive-sample 服务器 后端是基于Spring Boot的应用程序,请确保您已安装以下软件: 阿帕奇Maven OracleJDK 8 Docker和Docker Compose 项目根文件夹中有...
Jakarta EE 9的Maven原型该项目提供了用于生成Jakarta ... mvn -B archetype:generate \-DarchetypeGroupId=io.github.hantsy \-DarchetypeArtifactId=maven-archetype-jakartaee9 \-DarchetypeVersion=1.0 \-DgroupId=...
【压缩包子文件的文件名称列表】:提到的 "hantsy-master" 可能是一个开源项目或个人代码仓库的名称,Hantsy可能是作者的名字或者项目的代号。不过由于没有更多信息,我们无法深入讨论该项目的具体内容。 总结以上...