`
downpour
  • 浏览: 713693 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
00a07ae5-264f-3774-8903-8ad88ce08cb0
Struts2技术内幕
浏览量:116809
4d8508f2-c0dd-3df8-9483-04cc612afbbc
SpringMVC深度探险...
浏览量:229913
社区版块
存档分类
最新评论

Struts2的一些不尽人意的地方,兼答hantsy

阅读更多
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中,这个我认为都不是很大的问题。只不过插件的作者水平有高有低,官方没有出正式的支持倒是一个值得商榷的地方。
1
0
分享到:
评论

相关推荐

    struts-tutorial:我几年前写的有关Apache Struts1的博客条目的源代码-apache source code

    git clone https://github.com/hantsy/struts-tutorial.git 在根文件夹中,它包含一个ODT文档,该文档包含创建示例代码的详细步骤。 该文件是用中文写的。 回馈 几年前,我已经放弃了Apache Struts1,所以我将不...

    hantsy.github.io:个人网站

    hantsy.github.io 个人博客

    angular-spring-reactive-sample:带有Spring 5 WebFlux,Spring Boot 2,Spring Data Mongo,Spring Security,Spring Session和Angular 11的RESTful API演示

    git clone https://github.com/hantsy/angular-spring-reactive-sample 服务器 后端是基于Spring Boot的应用程序,请确保您已安装以下软件: 阿帕奇Maven OracleJDK 8 Docker和Docker Compose 项目根文件夹中有...

    maven-archetype-jakartaee9:Jakarta EE 9的Maven原型

    Jakarta EE 9的Maven原型该项目提供了用于生成Jakarta ... mvn -B archetype:generate \-DarchetypeGroupId=io.github.hantsy \-DarchetypeArtifactId=maven-archetype-jakartaee9 \-DarchetypeVersion=1.0 \-DgroupId=...

    发卡系统源码无授权版 带十多套模板

    发卡系统源码无授权版 带十多套模板

    STM32F103系列PWM输出应用之纸短情长音乐——无源蜂鸣器.rar

    STM32F103系列PWM输出应用之纸短情长音乐——无源蜂鸣器

    基于matlab开发的rvm回归预测 RVM采取是与支持向量机相同的函数形式稀疏概率模型,对未知函数进行预测或分类.rar

    基于matlab开发的rvm回归预测 RVM采取是与支持向量机相同的函数形式稀疏概率模型,对未知函数进行预测或分类.rar

    STM32 CubeMX FreeRtos系统 基于lwRB通用环形缓冲区的串口非阻塞发送

    STM32工具 CubeMX 使用FreeRtos系统 基于lwRB通用环形缓冲区的串口非阻塞发送,程序使用printf,通过重定向fputc函数,将发送数据保存在FIFO中,可以在中断中调用printf,保证了系统的线程安全和中断安全,将发送任务放在线程中。LwRB有两个指针一个r读指,一个w写指针,底层采用原子操作,不需要用到锁,保证了线程安全,最大的好处是它是支持DMA的,为CPU减负。

    整站程序EasyJF官网全站源码-easyjfcom-src.rar

    EasyJF官网全站源码_easyjfcom_src.rar是一个针对计算机专业的JSP源码资料包,它包含了丰富的内容和功能,旨在帮助开发人员快速构建和管理网站。这个源码包基于Java技术栈,使用JSP(JavaServer Pages)作为前端页面渲染技术,结合了Servlet、JavaBean等后端组件,为开发者提供了一个稳定、高效的开发环境。通过使用这个源码包,开发者可以快速搭建一个具有基本功能的网站建设平台。它提供了用户注册、登录、权限管理等基本功能,同时也支持文章发布、分类管理、评论互动等常见内容管理操作。此外,源码包还包含了一些实用的辅助工具,如文件上传、数据导出等,方便开发者进行网站的维护和管理。在界面设计方面,EasyJF官网全站源码采用了简洁、易用的设计风格,使得用户可以轻松上手并进行个性化定制。同时,它还提供了一些可扩展的插件和模板,开发者可以根据自己的需求进行修改和扩展,实现更多的功能和效果。总之,EasyJF官网全站源码_easyjfcom_src.rar是一个功能强大、易于使用的计算机专业JSP源码资料包,适用于各类网站建设项目。无论是初学者还是有经验的开发者

    node-v11.13.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v12.10.0-win-x86.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.2.1-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar

    基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar

    node-v6.10.2.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Java 中将 UUID 存储为 Base64 字符串

    使用 Base64 编码来对 UUID(Universally Unique Identifiers) 存储在一些特定的场合被广泛的使用。使用 Base64 对比直接使用 UUID 进行存储来说能够更多的节约空间。 本文对这方面的相关内容和问题进行探讨。 在这里,使用 Base64 来对 UUID 进行存储,涉及到一些类型的转换的。Base64 是编码算法,在实际使用的时候我们更多会用到 Byte 数组的方式来进行编码的。这样我们就比较明确在对其进行 Base64 转换之前,我们应该要先干什么了。

    Java网络爬虫(蜘蛛)源码.zip

    Java网络爬虫(蜘蛛)源码.zip

    pandas数据分析学习

    这是Pandas基础学习

    毕业设计基于STM32的桌面电子时钟的设计与实现硬件端系统源码.zip

    架构 主微控制器采用 STM32F103C8T6。 目前外设部分包括: 显示模块:0.96寸4针IIC通信协议的OLED模块 温湿度采集模块:DHT11 网络通信模块:ESP8266 报警模块:高电平触发的有缘蜂鸣器 其他:若干LED灯珠以及若干贴片按键 硬件端系统使用C语言编写

    新版PHP无陌然在线云加密平台系统源码 带安装说明.rar

    新版PHP无陌然在线云加密平台系统源码 带安装说明.rar新版PHP无陌然在线云加密平台系统源码 带安装说明.rar

Global site tag (gtag.js) - Google Analytics