概述
Struts2隶属于Apache组织的,我们知道这个组织很多工具,很多分支都对Java程序开发工程师有巨大意义,这个是对于MVC开发模式的自定义的一个框架。所谓的MVC模式,指的是
模型(Model)-视图(View)-控制器(Controller),通常简称MVC,是一种开发web应用程序的软件设计模式。该软件设计模式由以下三部分组成:
- 模型——属于软件设计模式的底层基础,主要负责数据维护。
- 视图——这部分是负责向用户呈现全部或部分数据。
- 控制器——通过软件代码控制模型和视图之间的交互
MVC的普及在于她区分了应用程序的逻辑层和用户界面层,并支持开发关注点的分离。在MVC模式下,控制器接收了所有来自应用程序的请求后,调用模型去准备视图所需要的数据,然后视图使用由控制器提供的数据最终生成一个可视的响应。下图是对Struts2的一个流程图解。
模型:模型主要负责管理应用程序的数据,它通过响应视图的请求和控制器的指令来更新自身的数据;
视图:通过控制器的指令触发所展现的一种特殊的数据格式。它们是基于像JSP、ASP、PHP之类模板系统的脚本,较易与AJAX技术进行整合。
控制器:
控制器负责响应用户输入并执行数据模型对象的交互。控制器在接收、确认输入后执行修改数据模型状态的业务操作。Struts2是一个以MVC为基础的框架。在接下来的章节,让我们看看如何在Struts2中使用MVC.
Struts2的架构:
一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的:
- 操作(Actions)
- 拦截器(Interceptors)
- 值栈(Value Stack)/OGNL
- 结果(Result)/结果类型
- 视图技术
下图是Struts2的例图:
而Struts2 与传统的MVC框架略有不同,因为它由Action扮演模型的角色,而不是控制器,虽然这样会有一些重叠。
Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。
除了上述部分,还有许多组件相关的信息。web应用程序组件、Actions组件、拦截器组件、结果组件等等。
这些是Struts2 MVC模式的体系结构概述,在随后的章节中,我们将详细了解各个部分。
Struts2执行流程:
通过上述图片的描述,我们可以依照下面几点解释在Struts2 中用户的请求生命周期:
- 用户发送一个资源需求的请求到服务器(例如:页面)。
- 核心控制器查看请求后确定适当的动作。
- 使用验证、文件上传等配置拦截器功能。
- 执行选择的动作来完成请求的操作。
- 另外,如果需要的话,配置的拦截器可做任何后期处理。
- 最后,由视图显示结果并返回给用户
Struts2主要执行流程:
在Struts2 的web应用程序里点击一个超链接或提交一个HTML表单时,会由控制器收集输入并发送一个叫Actions的Java类。Action被执行后,Result会选择一个资源给予响应。这个资源通常是一个JSP,也可以是一个PDF文件,一个Excel表格,或者是一个Java小程序窗口。
Struts2:主要的组件以及作用做以下说明:
Action类:创建一个动作了类,包含完整的动作类,包括用户以及视图与控制层的交互。
Interceptors:这是控制器的一部分,可依据需求创建拦截器,或使用现有的拦截器。
View:创建一个Jsp与用户进行交互,获取输入并且呈现最终信息;
Configuration Files:创建配置文件来连接动作、视图以及控制器,这些文件分别是struts.xml、web.xml以及struts.properties。
Struts2主要的动作有以下几个:
①在Web.xml文件夹里配置Struts2过滤器,‘org.apache.struts2.dispatcher.FilterDispatcher’这个文件为每个web应用程序提供接入点。在部署描述符(web.xml)中,Struts2 应用程序的接入点将会定义为一个过滤器。因此我们将在web.xml里定义一个FilterDispatcher类的接入点,而这个web.xml文件需要在WebContent/WEB-INF文件夹下创建。;
②配置Struts.xml文件
将Struts2 过滤器映射到 /* ,而不是 /*.action ,这意味着所有的url都会被Struts过滤器解析.
这里需要注意的是Struts.devMode开发模式进行配置在Struts.xml配置文件.设置这种开发模式,可以明显提高开发效率,当然不足之处在于性能肯定降低一点了。另外一种模式就是产品模式 产品模式(proMode);此时 DevMode=false;
1、每次请求都会重新加载资源文件,所以当对properties文件进行修改后,下一次请求是就能够反映相应的变化。(struts.i18n.reload = true也可以达到相同的效果)
2、每次请求的时候也会重新加载xml配置文件、验证文件等,这样可以方便调试或者修改相应的配置文件,而不用重新部署重启web服务器。(struts.configuration.xml.reload = true 也可以达到相同的效果)
3.在struts2中配置Package的属性有以下几点,
<constant>标签以及name和value属性将用于覆盖default.properties中定义的任一属性,就像我们设置的struts.devMode属性一样。设置struts.devMode属性允许我们在日志文件中查看更多的调试消息。
我们定义<action>标签对应于我们想要访问的每个URL,并且使用execute()方法定义一个访问相应的URL时将要访问的类。Results(结果)确定在执行操作后返回到浏览器的内容,而从操作返回的字符串应该是结果的名称。 Results按上述方式配置,或作为“全局”结果配置,可用于包中的每个操作。 Results有name和type属性可选,默认的name值是“success”。
Struts2属性文件:
接下来我们说说:Actions这个比较重要的知识点:
①Actions是Struts2框架的核心,因为它们适用于任何MVC(Model View Controller)框架。 每个URL映射到特定的action,其提供处理来自用户的请求所需的处理逻辑。但action还有另外两个重要的功能。 首先,action在将数据从请求传递到视图(无论是JSP还是其他类型的结果)方面起着重要作用。 第二,action必须协助框架确定哪个结果应该呈现在响应请求的视图中。
ActionSupport这个类也就是Struts中Action的主类,这个类有六个接口。下期详细描述:
拦截器:
拦截器在概念上与servlet过滤器或JDK代理类相同。拦截器允许横切功能,把action以及框架分开实现。你可以使用拦截器实现以下操作:
-
在调用action之前提供预处理逻辑。
-
在调用action后提供后处理逻辑。
-
捕获异常,以便可以执行备用处理。Struts2框架中提供的许多功能都是使用拦截器实现的,包括异常处理,文件上传,生命周期回调和验证等。事实上,由于Struts2将其大部分功能基于拦截器,因此不太可能为每个action分配7个或8个拦截器.
-
对Struts2拦截器进行一个整理:
-
拦截器的处理:
-
返回值结果类型,也就是所谓的results分为多种,这里简单说两种吧:
-
一种是xml,一种是json。
-
这个链接是对Struts2返回json的详细说明与配置<https://www.cnblogs.com/liubaozhe/p/4418741.html>
-
这个是Struts2返回Xml数据的链接:<https://blog.csdn.net/thinktik/article/details/80946311>
-
值栈;
在Struts2中有一门语言,叫做对象图导航语言(ognl)
用于引用和操作值栈上的数据,还可用于数据传输和类型转换。
OGNL非常类似于JSP表达式语言。OGNL基于上下文中存有根对象或默认对象的理念,使用标记符号(即#号)来引用默认或根对象的属性。
如前面所述,OGNL是基于上下文的,而Struts构建了一个ActionContext映射以供OGNL使用。 ActionContext映射包含以下内容:
-
应用程序 - 应用程序作用域变量
-
会话 - 会话作用域变量
-
根/值栈 - 所有的action变量都存储在这里
-
请求 - 请求作用域变量
-
参数 - 请求参数
-
属性 - 存储在页面,请求,会话和应用程序作用域中的属性
有必要了解的是,Action对象在值栈中总是可用的,因此如果你的Action对象有x和y属性,你可以随时使用。
ActionContext中的对象使用#号引用,但是,值栈中的对象可以直接引用,例如,如果employee是action类的属性,则可以按如下方式引用:
如果你在会话中有一个名为“login”的属性,你可以按如下方式检索:<s:property value="#session.login"/>
OGNL还支持处理集合 - 即Map,List和Set。例如,要显示颜色的下拉列表,你可以执行以下操作: <s:select name="color" list="{'red','yellow','green'}" /> OGNL表达式很智能地将“红色”,“黄色”,“绿色”解释为颜色,并基于此构建了列表。在下一章我们学习各种的标签时,OGNL表达式将会广泛的用到。因此,不要用孤立的方式去了解OGNL,让我们结合Form标签/Control标签/Data标签和Ajax标签部分中的一些示例来了解它。
一般情况下,Struts2会将action放在顶部.方便实用ognl导航语言获取并且表达。
最后
以上就是妩媚电源为你收集整理的SSH系列一之Struts2的全部内容,希望文章能够帮你解决SSH系列一之Struts2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复