Struts框架2

本文深入讲解了Struts2框架中关键内容,包括参数传递、转向机制、迭代器标签、条件判断、URL操作、选择标签以及值栈的管理。同时介绍了如何分离配置文件和处理异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一章 Struts2框架的基础使用



Struts2的核心使用

1.传参

1.1)基本数据的传参

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2)数组传参

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3)对象传参

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4)多个对象传参

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.转向

在节点下生成节点进行转向

在这里插入图片描述

3.标签

ps: 在页面使用标签是,记得必须引入s标签库

<%@taglib prefix=“s” uri="/struts-tags"%>

3.1)iterator标签

即:页面迭代标签
s:iterator 可以遍历 数据栈里面的任何数组,集合等等
s:iterator 标签有3个属性:

value :被迭代的集合

id :指定集合里面的元素的id
status : 迭代元素的索引

在这里插入图片描述
在这里插入图片描述

3.2)if标签

即:判断标签

进行代码的判断,例如页面中table标签奇偶行的染色

在这里插入图片描述
在这里插入图片描述

3.3)url标签和action标签和a标签与href标签与param标签

即: 进行地址传值

在这里插入图片描述

代码页面解析为

在这里插入图片描述

相当于我们的超链接,从而进行地址传参,进行后台action节点的操作执行其editpage方法。

3.4)select标签

即: 选择标签

在这里插入图片描述

将value的选项值以list的方式存储,其s标签库中的select标签其本质就是我们所使用的的select标签嵌套 option标签。

在这里插入图片描述

在这里插入图片描述

修改页面同样如此,只不过多添加了一个value属性从而在修改页面展示后台存储的是哪个结果,既而展示出来。

4.值栈

4.1)什么是值栈

值栈是对应每一个请求对象的轻量级的内存数据中心。

	Struts2中一个特性就是引入了值栈,在这里统一管理着数据,供Action、
Result、Interceptor等Struts2的其他部分使用,这样一来,数据被集中管
理起来而不会凌乱,大大方便了程序编写。
	Struts2中关于值栈的另外一个特性就是:大多数情况下,你根本无需关心
值栈,你不用管它在哪里,不用管它里面有什么,你只需要去获取自己需要的数据
就可以了。也就是说,你可以隐式的使用值栈。当然,如果编写自定义的Result
或拦截器等较复杂功能的时候,还是需要显示访问值栈的。

4.2)值栈的作用

值栈能够线程安全的为每个请求提供公共的数据存取服务。当有请求到达的时候,Struts2会为每个请求创建一个新的值栈,也就是说,值栈和请求是一一对应的,不同的请求,值栈也不一样,而值栈封装了一次请求所有需要操作的相关的数据。正是因为值栈和请求的对应关系,因而值栈能保证线程安全的为每个请求提供公共的数据存取服务。

ps:值栈是线程安全的,且功能是提供数据的存取

4.3)狭义与广义值栈

狭义值栈
	通常指的是实现com.opensymphony.xwork2.util.ValueStack接口的
对象,目前就是com.opensymphony.xwork2.ognl.OgnlValueStack对象。
	狭义值栈主要用来存取动态EL(表达式语言)运算需要的值和结果,当然
OgnlValueStack对象主要是用来支持OGNL(对象图导航语言)运算的。狭义值
栈里面存放着一些OGNL可以存取访问的数据,
	典型如:
		Action的实例,这样就可以通过OGNL来访问Action实例中的属性的值了
		OGNL表达式运算的值,可以设置到值栈中,可以主动访问值栈对象,强行设置
		OGNL表达式产生的中间变量,比如在使用Struts2的标签的时候,
使用循环标签,自然会有循环的变量,这些都存放在值栈中

广义值栈
	通常指的是ActionContext对象,ActionContext是Action运行的上
下文,每个ActionContext是一个基本的容器,包含着Action运行需要的数据,
比如请求参数、会话等。
	ActionContext是线程安全的,每个线程有一个独立的ActionContext,
这样你就不用担心值栈中值的线程安全问题了。ActionContext里面存放有很多
的值,典型如:
		Request的parameters:请求中的参数,要注意这里的数据是从请求
对象里面拷贝出来的,因此这里数据的变化是不会影响到请求对象里面的参数的值的
		Request的Attribute:请求中的属性,这里其实就是个Map,存放着
请求对象的属性数据,这些数据和请求对象的Attribute是连动的
		Session的Attribute:会话中的属性,这里其实就是个Map,存放着
会话对象的属性数据,这些数据和会话对象的Attribute是连动的
		Application的Attribute:应用中的属性,这里其实就是个Map,
存放着应用对象的属性数据,这些数据和应用对象的Attribute是连动的
		Value stack:也就是狭义值栈,ActionContext以value stack
作为被OGNL访问的根,简单点说,OGNL在没有特别指明的情况下,访问的就是
value stack里面的数据
		attr:在所有的属性范围中获取值,依次搜索page、request、
session和application。
  
  我们知道Xwork与Web是无关的,因此Action不用去依赖于任何Web容器,
不用和Servlet 的API去交互,但是Action需要能访问到Web应用的数据,不
仅仅是取得请求参数的值,往往也需要在Action里直接获取请求或会话的一些
数据,对于这些数据,现在都可以通过ActionContext来获取到

PS:Struts2的值栈就是用来存放数据对象的地方,或者简单的来说就是内存中的一部分内存

5.分离配置文件

1)我们可以复制一下struts.xml,且存放的路径与struts.xml的平级的,
且更改名字为:struts-xxx.xml
2)在struts.xml将struts-xxx.xml引入
3)保存清空项目正常启动好使

在这里插入图片描述

5.声明时异常处理

1.Struts2中对异常处理的方式常见有两种:
    1.1指定属于某一个action的异常
    1.2指定一个全部action的异常

2.步骤: 
	准备的阶段:新创建一个项目:Struts2Exception,且将用到的jar包
配置好,且将启动Struts2的filter在web.xml中配置好,且在src下的
struts.xml创建好
    1)创建一个类:HelloAction,且实现Action接口
    @Override
	public String execute() throws Exception {
		  String str=null;
		  str=str.substring(0);//模拟一个空指针异常
		  return “success”;
	}

    2)在项目的根目录下创建一个hello的文件夹,然后在里面创建两个页面:list.jsp和error.jsp
     list.jsp:在body里面简单的写上:  正常的页面
     error.jsp:在body里面简单的写上: 页面不知道去哪了,可能是出去玩了.......

    3)在struts.xml中配置:
    <action name="hello" class="com.rj.bd.hello.HelloAction"    > 
    	<exception-mapping result="nullpoint" 
    		exception="java.lang.NullPointerException">
    	</exception-mapping>
    	<result name="success" type="dispatcher">/hello/list.jsp</result>
    	<result name="nullpoint">/hello/error.jsp</result>		   
    </action> 

    4)在index.jsp上进行访问:   
    <a href="<%=request.getContextPath()%>/hello.action">
    	Struts2声明式异常处理:只对单个Action起作用
    </a>

	5)针对所有的Action都起作用的全局声明式异常:只是配置的方式作出
了改动而已其他的都没太大变化,在struts.xml中
     <global-exception-mappings>
       <exception-mapping result="nullpoint" 
       		exception="java.lang.NullPointerException">
       </exception-mapping>
   	 </global-exception-mappings>


  	<action name="hello" class="com.rj.bd.hello.HelloAction"    > 
		<result name="success" type="dispatcher">/jsp/list.jsp</result>
		<result name="nullpoint">/hello/error.jsp</result>		   
  	</action> 
  
    6)在index.jsp上进行访问: 
   	<a href="<%=request.getContextPath()%>/hello.action">
   		Struts2声明式异常处理:全部Action都起作用
   	</a>

在这里插入图片描述


下一章 Struts2的上传和下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值