我是靠谱客的博主 妩媚电源,最近开发中收集的这篇文章主要介绍SSH系列一之Struts2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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有nametype属性可选,默认的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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部