深入浅出Struts2

Struts2简单介绍

Struts 2框架作为Struts 1.X框架的替代技术,相对Struts 1.X来说,有着本质上的改变。 Struts 2框架是从WebWork框架发展而来的.Apache Struts 2即是大家之前所熟悉的webwork2.随着各自的发展。webwork和Struts社区决定将二者合并为Struts2,新版本号的Struts与曾经版本号一样更易于使用。从某种程度上来讲。Struts2没有继承Struts1的血统,而是继承了webwork的血统而且吸收了Struts1和webwork两者的优势。所以说Struts2并非一个全新的框架。

mvc设计模式

谈到Struts就不得不谈谈mvc设计模式。mvc设计模式是一种眼下广泛应用的软件设计模式。随着网络应用的高速发展,应用变得越来越复杂,mvc设计模式为应用模型提供了最主要的分析方法。为构造产品提供了清晰的设计框架,为软件project提供规范的根据。

    mvc设计模式将应用程序划分为模型层、视图层、控制器。

     
模型层包含业务逻辑和数据訪问层,在整个mvc模型中Model部分就是业务流程或状态的处理以及业务规则的制定。能够说是mvc中最重要的部分。

视图。一个web项目中可能有非常多不同的视图,mvc设计模式对于视图的处理仅限于视图上数据的採集和处理以及响应用户的请求。而不包含在视图上的业务流程的处理。

控制器,控制器在视图层与业务逻辑层之间起到了桥梁作用,控制了两者之间的数据流向。

当用户请求从V部分传到控制器时,控制器调用对应的模型层在控制器中进行处理。控制器再将处理结果转发给适当的视图层。循环进行此过程。

mvc工作流程:

    1.用户的请求提交给控制器

2.控制器受到用户请求后依据用户的详细需求,调用对应的模型(javabean或者EJB)来处理用户请求。

    3.控制器调用模型层进行数据处理后,依据处理结果进行下一步的跳转,如跳转到还有一个视图或其它控制层。

struts2工作原理

Struts2是基于mvc设计模式的java web框架技术之中的一个,Struts2框架依照mvc的设计思想把java web 应用程序分为:控制层(核心控制器和业务控制器)、模型层(业务逻辑组件和数据库訪问组件)、视图层(包含HTML、JSP、Struts2的表签)。

1.客户提交请求道server

2.请求被提交到一系列的过滤器或者拦截器。最后到达FilterDispather

3.FilterDispather读取配置文件struts.xml。依据配置信息调用某个Action来处理客户请求。

        4.Action处理后。返回结果,FilterDispather依据struts.xml的配置找到相应的页面跳转。

核心控制器

Struts2的成功因素之中的一个在于核心控制器FilterDispather。该控制器作为一个过滤器执行在java web项目中,负责拦截全部用户请求,当用户请求到达时,该过滤请求会过滤用户请求。FilterDispather负责四个方面的功能:

   (1)运行Actions

   (2)清除ActionContext

   (3)维护静态内容

   (4)清除request生命周期内的XWork的interceptors

业务控制器

Struts2的成功的还有一个因素在于Action业务逻辑控制器。

开发基于Struts2的java web 应用项目时,Action是数据处理的核心,须要编写大量的Action类,并在struts.xml文件里配置Action。

Action类中包括了对用户请求的处理逻辑,因此也把Action称为Action业务控制器。它是用户请求和业务逻辑之间的桥梁,每一个Action充当客户的业务代理。

总结

Struts2紧紧环绕两大核心控制器,做到了依据请求的參数转发请求给适当的控制器、在控制器中调用业务接口、将业务接口返回的结果包装起来发送给指定的视图,并由视图完毕处理结果的展现。使得开发模块化、减少耦合、更易于扩展。当然Struts2的一些细节优点就更不用说了,比如获取表单内容,并组织生成參数对象、易于扩展的插件机制。

时间: 2024-11-01 09:46:35

深入浅出Struts2的相关文章

深入浅出Struts2+Spring+Hibernate框架

一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司节省了不少的人力成本. 为什么使用Struts2? struts2实现了视图与业务应用逻辑的解耦(软件工程的高内聚,低耦合原则). 在Model 1时代,开发web项目我们都是在JSP里写入处理业务逻辑的JAVA代码,尤其像涉及到数据库和页面form表单数据之间交互的时候,每次都要写连接.查询.增加

struts2源码调试环境的搭建

源码之前,了无秘密. 说一句逼格很高的话来镇镇场子. 这两天在看陆舟的<Struts2技术内幕>,一边看脑子一边冒出四个字:相见恨晚.极力推荐想了解Struts2的人看看这本书,之前一直在看李刚的<轻量级JavaEE企业应用实战>,感觉不如他的疯狂java讲义好.为什么呢?就觉得书的定位不清楚.如果是拿来入门,则又略显繁琐,倒不如那本<深入浅出Struts2>来得简洁:拿来精进,又显得深度不够.就跟谭浩强的C语言系列一个毛病.所以如果大家想入门Struts2,就看那本&

Struts2 核心基础总结

学习参考资料: 主: 一个号称从事软件开发超过16年的老外的网站 Apache官网上的Struts2 辅: 一本<深入浅出Struts2> 一本<Struts2技术内幕> 注:笔者会不断修改完善,因为刚开始记笔记,时间比较紧 笔记方法:问题--答案式: 学习策略:先以运行相关具体内容为主,再进行抽象理论描述 **第一问:Struts 2是什么?** 1.Struts2运行框架和核心组件 Struts 2角度:Struts 2运行的框架结构图 Struts 2的五大核心组件分别是:

技术学习规划

技术学习规划: ? 2015年 2016年 2017年 基础理论 TCP/IP协议: ? ? ? ? ? ? ? ? ? ? ? ?<TCP/IP详解卷I>(第1遍) ? ? ? ? ? ? ? ? ? ? ? ?<图解TCP/IP>. 数据结构与算法: ? ? ? ? ? ? ? ? ? ? ? ? ?<算法> TCP/IP协议: ? ? ? ? ?<TCP/IP详解卷I>(第2遍) ? ? ? ? ? HTTP协议:<图解HTTP> 数据结构

java技术学习步骤

java技术学习步骤 ? 一.入门 二.基础巩固 三.深入学习 四.源码剖析 五.总结分析 语言基础 <java核心技术卷I> <java编程思想> <java核心技术卷II> <Effective java > <java 特种兵> ? ? 框架技术 Struts2:<深入浅出Struts2> ? ? ? ? ? ? ?<Strut2实战> Hibernate:<精通Hibernate> Spring:<

技术学习步骤

java技术学习步骤 ? 一.入门 二.基础巩固 三.深入学习 四.源码剖析 五.总结分析 语言基础 <java核心技术卷I> <java编程思想> <java核心技术卷II> <Effective java > <java 特种兵> ? ? 框架技术 Struts2:<深入浅出Struts2> ? ? ? ? ? ? ?<Strut2实战> Hibernate:<精通Hibernate> Spring:<

Struts2.X深入浅出 学习笔记

第一节.MVC以及Struts2简介 第二节.Action生命周期以及接收表单数据 第三节.Struts2配置以及Struts.xml详解 Struts2 主要配置文件 ? 1 2 3 4 5 Web.xml 设置过滤器以及annotation初始化参数 Struts.xml 主配置文件 Struts.properties 默认属性文件 Struts-default.xml 默认配置文件 Struts-plugin.xml 插件配置文件 Struts2 主要配置加载次序 ? 1 2 3 4 5

深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础. 然而,如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我非常满意的答复.因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架.其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?

Struts2的值栈和对象栈

ValueStack 如何得到值栈: 如何将对象存入值栈: 让值栈执行表达式来获得值: 在JSP中跳过栈顶元素直接访问第二层: 在JSP中访问值栈对象本身(而不是它们的属性) ActionContext ValueStack与ActionContext的联系和区别: 如何获得ActionContext: 如何向ActionContext中存入值: 如何从ActionContext中读取值: HttpServletRequest类或request的Map 使用HttpServletRequest类