struts开始于2000年3月,1.0在2001年7月发布。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。MVC设计模式把一个系统分成3个相互协调的部分:
Model(模型)模型用于封装系统的状态
View(视图)是模型的表示,提供用户交互界面。当模型状态发生变化时,视图应该得到通知,以便更新视图。
Controller(控制器)接受来自视图的请求,修改模型的状态。
在基于JSP/Servlet的Web应用中要使用MVC模式,需要解决一个问题。我们知道,HTTP的底层是TCP/IP协议,而TCP/IP是一种无状态连接的协议,那么如果我们的模型发生了变化,就无从通知视图。Struts采用了在“JSP规范 v0.92”中提到的MVC Model 2,这是对MVC在Web上应用的修订版。图示如下:

图表 1:MVC Model 2(From Malcolm Davis)
Struts应用有3个主要部件:一个Servlet Controller(由Struts提供,org.apache.action.ActionServlet,以下简称controller)及负责具体业务处理的Action类(org.apache.action.Action的基类);Jsp页面(viewer);应用的业务逻辑封装(model)。Struts 的中心控制器(ActionServlet)接受所有来自客户端的请求,并根据系统的配置(Struts-config.xml)路由HTTP请求到其他Action对象(开发者实现的org.apache.struts.action.Action的子类),在这些Action对象中会进行所有的业务操作,比如插入一条订单,修改一条记录。处理完毕,由Struts的ActionServlet转向到JSP页面,将处理结果返回给客户端。从这儿可以看出在Struts中ActionServlet担任了重要的角色,由它控制所有的程序流转,是MVC三个相对独立的部分协调工作,提供系统的完善功能。从下图可见Struts是MVC Model 2的一个典型应用。

图表 2:Struts工作机理(From Malcolm Davis)
在Struts启动时,controller会读入一个配置文件struts-config.xml,其中定义了前端请求的url与相应的Action类及使用的Form类的映射关系,下面是一个struts-config.xml中的片断:
-
- <action path="/logon"
- type="org.apache.struts.webapp.example.LogonAction"
- name="logonForm"
- scope="request"
- input="/logon.jsp">
- </action>
从中可以看出,这个action会响应url类似于/logon的请求(在后面我们会看到,这儿的实际的url要根据在web.xml中配置,比如可能为/logon.do或/logon.other之类的带后缀的url),负责处理这个请求的action类是org.apache.struts.webapp.example.LogonAction,使用的FormBean是logonForm,scope界定了这个FormBean存在的范围是只在当前request中存在。
struts会读入这些设置,生成相应的org.apache.action.ActionMapping对象。controller正是使用这些mapping来把HTTP请求转发到应用的actions。一个ActionMapping指定了
- 一个请求URI
- 对应的类(Action的子类)
- 需要的属性
对于一个DB应用,
- 一个商业逻辑Bean用于连接、查询数据库
- 这个Bean返回结果到Action
- Action将这些结果存储到request的form bean中
- Jsp显示
分享到:
相关推荐
### JSP 学习笔记概览 #### 一、Java EE 核心十三种技术介绍 **Java EE**(Java Platform, Enterprise Edition)是Java的一个版本,专为开发企业级应用而设计。它包含了多种技术和规范,这些技术共同构建了一个...
int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) long 64bit, -2^63~2^63-1 (900亿亿,20位有效数字) float 32bit, 9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算) double 64bit, 18位...
- **Struts2**的学习曲线较陡峭,尤其是在配置和理解其工作原理方面。 - **社区支持**: - **SpringMVC**有庞大的社区支持,资源丰富。 - **Struts2**也有一定的社区支持,但由于SpringMVC的普及,资源相对较少。...
内容概要:本文详细介绍了基于多目标粒子群(MOPSO)算法的冷热电联供(CCHP)综合能源系统运行优化的方法和技术细节。文章首先构建了一个涵盖冷、热、电负荷的优化调度模型,该模型不仅考虑了多种能源资源如燃气轮机、电制冷机、锅炉和风光机组,还包括与上级电网的购售电交易。随后,文章展示了MOPSO算法的具体实现步骤,包括粒子初始化、迭代更新、惯性权重调整、非支配排序和拥挤度计算等关键技术环节。此外,文中还讨论了MATLAB仿真平台的优势及其在处理多时间尺度耦合、风光出力波动等方面的应用。最终,通过Pareto前沿分析,揭示了系统在不同条件下的最优运行模式。 适用人群:适用于从事能源系统优化的研究人员、工程师以及对多目标优化算法有兴趣的学习者。 使用场景及目标:①帮助研究人员理解和应用MOPSO算法进行CCHP系统的优化;②为工程师提供具体的代码实现和仿真工具,以便更好地设计和管理实际的能源系统;③促进学术交流和技术进步,推动可持续能源的发展。 其他说明:文章提供了详细的MATLAB代码片段,便于读者理解和复现实验结果。同时,强调了多目标优化在解决复杂能源系统问题中的重要性和优越性。
原始数据集
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
数据库
内容概要:本文详细介绍了基于Matlab 2021a的异步电机矢量控制系统中电流滞环控制的实现过程。首先,文章解释了电流环的整体结构,包括定子电流的坐标变换、转矩分量和励磁分量的分离以及旋转变压器模块的应用。接着,展示了电流滞环控制的核心代码,强调了带积分修正的滞环控制机制,并讨论了SVPWM模块的实现技巧。此外,文章探讨了速度环PI参数的自整定设计、谐波分析、磁链观测器的改进方案以及仿真加速技巧。最后,分享了一些实用的调试经验和仿真优化方法,如参数自适应调整、变步长求解器的选择和数据存储格式的优化。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是对异步电机矢量控制和电流滞环控制感兴趣的读者。 使用场景及目标:适用于希望深入了解异步电机矢量控制系统中电流滞环控制实现细节的研究人员和技术人员。目标是帮助读者掌握电流滞环控制的关键技术和调试技巧,提高仿真实践能力。 其他说明:文中提供了丰富的代码片段和调试经验,有助于读者更好地理解和应用所介绍的技术。同时,报告中还包括详细的故障分析和解决方案,确保读者能够避免常见陷阱并顺利进行仿真。
内容概要:本文详细介绍了如何在LabVIEW 2019环境中实现与三菱PLC的通信及其多线程交互。首先探讨了使用OPC和MC两种通讯协议与三菱PLC建立连接的方法,接着讲述了SQLite数据库用于数据存储的具体步骤,然后阐述了JKI状态机框架的应用,最后讲解了通过数组队列实现多线程交互的技术细节。文中不仅提供了具体的代码示例,还分享了许多实用的经验技巧,如异常处理、性能优化等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些正在使用或计划使用LabVIEW进行PLC通信和数据处理的人群。 使用场景及目标:适用于需要构建高效稳定的工业控制系统的企业和个人开发者。主要目的是帮助读者掌握如何利用LabVIEW平台完成复杂的PLC通信任务,提高系统的可靠性和效率。 其他说明:作者强调了在实际应用过程中需要注意的问题,例如硬件兼容性、网络稳定性、数据安全性等方面的内容,并给出了针对性的解决方案。此外,还提到了一些常见的误区和潜在的风险点,为后续的工作提供了宝贵的参考资料。
计算机视觉_深度学习_图像处理_目标检测_OpenCV_TensorFlow_PyTorch_基于YOLOv5改进算法的高精度实时多目标检测与跟踪系统_用于智能监控_自动驾驶_工业
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
内容概要:本文详细介绍了威纶通触摸屏与施耐德ATV12变频器之间的Modbus通讯方法,涵盖硬件接线、参数设置、控制程序编写以及调试技巧。首先,文章讲解了正确的硬件连接方式,强调了接线规范和注意事项,如使用带屏蔽的双绞线并确保正确接地。接着,针对ATV12变频器的具体参数设置进行了详尽说明,包括通信模式的选择、波特率、校验位等重要参数的配置。随后,文章展示了如何在威纶通触摸屏上创建Modbus RTU设备,并提供了具体的配置参数和控制命令示例。此外,文中还分享了一些常见的调试问题及其解决办法,如通讯超时、频率设定异常等。最后,给出了实用的调试建议,如使用串口助手抓包分析和加入通讯心跳检测等功能。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些负责PLC编程、HMI界面开发以及设备集成工作的专业人员。 使用场景及目标:适用于需要将威纶通触摸屏与施耐德ATV12变频器进行Modbus通讯连接的实际工程项目中,帮助技术人员顺利完成设备间的通讯配置,确保系统稳定可靠运行。 其他说明:本文不仅提供了详细的理论指导,还结合了丰富的实践经验,能够有效地提高读者在实际工作中解决问题的能力。同时提醒读者,在进行相关操作前务必仔细阅读官方文档,避免因误操作造成不必要的损失。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
内容概要:本文详细介绍了直流无感无刷电机的方波控制方法及其初始位置检测方案。主要内容涵盖ADC和比较器结合用于初始位置检测的技术细节,包括代码示例;多种控制方式如开环控制、速度环控制和双闭环控制的具体实现;通信部分采用串口进行数据交换;多重保护机制确保系统的安全可靠;以及启动方式的选择和优化。此外,还讨论了一些硬件特色,如休眠电路和防打火电路的设计。 适合人群:从事电机控制系统设计的研发工程师和技术爱好者,尤其是对直流无感无刷电机有研究兴趣的专业人士。 使用场景及目标:适用于需要深入了解直流无感无刷电机控制原理的研究人员,帮助他们掌握具体的实现技术和优化技巧,从而应用于实际项目中,提高电机控制系统的性能和可靠性。 其他说明:文中提供了大量实用的代码片段和实践经验,强调了实际应用中的注意事项和调试技巧,对于解决常见问题非常有帮助。