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中,这个我认为都不是很大的问题。只不过插件的作者水平有高有低,官方没有出正式的支持倒是一个值得商榷的地方。
分享到:
相关推荐
git clone https://github.com/hantsy/struts-tutorial.git 在根文件夹中,它包含一个ODT文档,该文档包含创建示例代码的详细步骤。 该文件是用中文写的。 回馈 几年前,我已经放弃了Apache Struts1,所以我将不...
hantsy.github.io 个人博客
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=...
发卡系统源码无授权版 带十多套模板
STM32F103系列PWM输出应用之纸短情长音乐——无源蜂鸣器
基于matlab开发的rvm回归预测 RVM采取是与支持向量机相同的函数形式稀疏概率模型,对未知函数进行预测或分类.rar
STM32工具 CubeMX 使用FreeRtos系统 基于lwRB通用环形缓冲区的串口非阻塞发送,程序使用printf,通过重定向fputc函数,将发送数据保存在FIFO中,可以在中断中调用printf,保证了系统的线程安全和中断安全,将发送任务放在线程中。LwRB有两个指针一个r读指,一个w写指针,底层采用原子操作,不需要用到锁,保证了线程安全,最大的好处是它是支持DMA的,为CPU减负。
EasyJF官网全站源码_easyjfcom_src.rar是一个针对计算机专业的JSP源码资料包,它包含了丰富的内容和功能,旨在帮助开发人员快速构建和管理网站。这个源码包基于Java技术栈,使用JSP(JavaServer Pages)作为前端页面渲染技术,结合了Servlet、JavaBean等后端组件,为开发者提供了一个稳定、高效的开发环境。通过使用这个源码包,开发者可以快速搭建一个具有基本功能的网站建设平台。它提供了用户注册、登录、权限管理等基本功能,同时也支持文章发布、分类管理、评论互动等常见内容管理操作。此外,源码包还包含了一些实用的辅助工具,如文件上传、数据导出等,方便开发者进行网站的维护和管理。在界面设计方面,EasyJF官网全站源码采用了简洁、易用的设计风格,使得用户可以轻松上手并进行个性化定制。同时,它还提供了一些可扩展的插件和模板,开发者可以根据自己的需求进行修改和扩展,实现更多的功能和效果。总之,EasyJF官网全站源码_easyjfcom_src.rar是一个功能强大、易于使用的计算机专业JSP源码资料包,适用于各类网站建设项目。无论是初学者还是有经验的开发者
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.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.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
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提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
使用 Base64 编码来对 UUID(Universally Unique Identifiers) 存储在一些特定的场合被广泛的使用。使用 Base64 对比直接使用 UUID 进行存储来说能够更多的节约空间。 本文对这方面的相关内容和问题进行探讨。 在这里,使用 Base64 来对 UUID 进行存储,涉及到一些类型的转换的。Base64 是编码算法,在实际使用的时候我们更多会用到 Byte 数组的方式来进行编码的。这样我们就比较明确在对其进行 Base64 转换之前,我们应该要先干什么了。
Java网络爬虫(蜘蛛)源码.zip
这是Pandas基础学习
架构 主微控制器采用 STM32F103C8T6。 目前外设部分包括: 显示模块:0.96寸4针IIC通信协议的OLED模块 温湿度采集模块:DHT11 网络通信模块:ESP8266 报警模块:高电平触发的有缘蜂鸣器 其他:若干LED灯珠以及若干贴片按键 硬件端系统使用C语言编写
新版PHP无陌然在线云加密平台系统源码 带安装说明.rar新版PHP无陌然在线云加密平台系统源码 带安装说明.rar