Struts2学习之处理结果

在最开始的《 Struts2学习之初见Struts2 》这篇文章中,也简单的说了说struts2中如何给请求者发送响应内容。这篇文章就对struts2中到底是如何处理响应结果进行详细的总结。

通过前面的文章,我们知道Action只是Struts2控制器的一部分,所以它不能直接生成对浏览器的响应。Action只负责处理请求,负责生成响应的视图组件,通常就是JSP页面,而Action会为JSP页面提供显示的数据。当Action处理用户请求结束后,将返回一个普通字符串,整个普通字符串就是一个逻辑视图名。Struts2通过配置逻辑视图名和物理视图之间的映射关系,一旦系统收到Action返回的某个逻辑视图名,系统就会把对应的物理视图呈现给浏览者。

关于浏览者、控制器和视图资源之间的时序图如下:

如上图所示,Action处理完用户请求后,并未直接将请求转发给任何具体的视图资源,而是返回一个代表逻辑视图的普通字符串,Struts2框架收到这个逻辑视图后,把请求转发到对应的视图资源,视图资源将处理结果呈现给用户。

通过返回一个代表逻辑视图的普通字符串,这样的设计将Action类和Struts2框架进行了解耦、分离,提高了更好的代码复用性。这就是在Struts2框架中处理结果的基本原理。

配置处理结果

控制器Action会返回一个代表逻辑视图的普通字符串,我们需要在struts.xml中将逻辑视图和物理视图进行映射,Struts2在struts.xml文件中使用 <result .../> 元素来配置结果,根据 <result .../> 元素所在位置的不同,Struts2提供了以下两种结果:

  • 局部结果:将 <result .../> 作为 <action .../> 元素的子元素配置
  • 全局结果:将 <result .../> 作为 <global-results .../> 元素的子元素配置

配置 <result .../> 元素时通常需要指定如下两个属性:

  • name:该属性指定所配置的逻辑视图名
  • type:该属性指定结果类型

下面就分别对如何配置局部结果和全局结果进行详细的总结。

配置局部结果

前面的文章中,在struts.xml中都是这样配置逻辑视图和物理视图之间的映射的:

<action name="login" class="com.jellythink.practise.LoginAction">
    <result name="default">/default.jsp</result>
</action>

上面的这种写法使用了最简单的形式,使用了很多默认的值,如果写完整了,它应该是这个样子的:

<action name="login" class="com.jellythink.practise.LoginAction">
    <result name="success" type="dispatcher">
        <param name="location">/success.jsp</param>
    </result>
</action>

这才是最繁琐,最原始的写法;既指定了需要映射的逻辑视图名(success),也指定了结果类型(dispatcher),并使用子元素的形式来指定实际视图资源。

对于上面使用 <param .../> 子元素配置结果的形式,其中 <param .../> 元素用于配置一个参数,与所有配置参数的地方相似,配置参数需要指定参数名和参数值。 <param .../> 元素配置的参数名由name属性指定,此处的name属性可以取如下两个值:

  • location:该参数指定了该逻辑视图对应的实际视图资源
  • parse:该参数指定是否允许在实际视图名字中使用OGNL表达式,默认值true。

由于不同的结果类型可以配置不同的参数,具体的请参见 这里 。那么为什么这么繁琐的写法可以简化成那么简单的写法呢?

在配置处理结果时,如果配置 <result .../> 元素时没有指定location参数,系统将会把 <result ...> ... </result> 中间的字符串当成实际视图资源;如果没有指定name属性,则name属性采用默认值:success;如果没有指定type属性,则采用Struts2的默认结果类型。基于此,我们就可以写出最简单的形式。

配置全局结果

如果将 <result .../> 元素配置在 <global-results .../> 元素中,那么该 <result .../> 元素就配置了一个全局结果,全局结果将对所在包中的所有Action都有效。例如以下配置代码:

<package name="lee" extends="struts-default" namespace="/Login" >
    <!--定义全局结果-->
    <global-results>
        <result name="error">/error.jsp</result>
    </global-results>
    <action name="login" class="com.jellythink.practise.LoginAction" />
</package>

虽然在 <action .../> 中没有配置任何的 <result .../> ,由于配置了全局结果,所以这并不会妨碍系统的运行。

如果一个Action里包含了与全局结果里同名的结果,则Action里的局部Result会覆盖全局的Result。也就是说,当Action处理用户请求结束后,首先会在本Action里的局部变量里搜索逻辑视图对应的结果,只有在Action里的局部结果里找不到逻辑视图对应的结果,才会到全局结果里搜索。

总结

到这里就总结的差不多了,关于Struts2处理结果的学习,后面还有很多篇文章的,这里只是一个开始了。后面的文章再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值