Struts2一览

本文介绍了Struts2的初始化过程,Action配置及其执行流程。讲解了Action如何获取表单数据,比较了Servlet与Action的区别,并探讨了值栈的存储位置和数据设置。此外,还深入解析了Struts2的拦截器机制,包括默认拦截器的执行时机,以及AOP和责任链模式在拦截器中的应用。最后,提到了过滤器与拦截器的区别,以及解决Struts2中的一些常见问题和模块化开发的实践。
摘要由CSDN通过智能技术生成
概述(版本:struts2.3.10)
框架的底层很多都会用到反射技术
过滤器在程序启动的时候创建,创建过滤器会执行init方法()

init:加载自带的配置文件和用户创建的


struts执行过程以及Action配置:
为了方便开发者,在servlet的基础上封装了一些繁杂的操作,比如接收参数,页面跳转等,利用反射技术,
开发者只需要在配置文件中配置相应的action即可。struts2就是一个过滤器(implements Filter),因此要在web.xml配置,
它的配置/*,可以拦截一切request请求,进行相应的处理之后,跳转页面。

<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pettern>
</filter-mapping>
①、浏览器request请求 https://ip:port/demo1/hello.action
②、filter拦截,读取url,得到action名字hello
③、在src找struts.xml,利用dom4j解析xml中的配置,找到<action name="hello">的节点,读取得到action全路径(class属性)
④、利用反射技术执行Action的默认方法execute:

Class clazz = Class.forName("action全路径");
Method m = clazz.getMethod("execute");  //默认action标签有个属性叫method,默认值为"execute",可以改变
Object obj = m.invoke();
⑤、执行完方法之后,读取result标签,得到要返回的jsp,在用servlet返回到相应页面(request.getDispacher().forword())
<struts>
	<package name="delloDemo" extends="struts-default" namespace="/">
		<action name="hello" class="com.dhh.action.HelloAction" method="属性占位">
			<result name="ok" type="属性占位">/hello.jsp</result>
		</action>
	</package>
</struts>
标签:
extends:一定继承struts-default才具有action的功能
namespace:namespace的值和action的name属性构成url的路径
method:默认值就是execute,则直接action类中的execute方法

action的name属性:可以写通配符*(常用) 

具体配置:

<action name="hello_*" class="com.dhh.action.HelloAction" method="{1}">
type属性:
(1)dispatcher转发(浏览器路径不变,一次请求)--默认值
(2)redirect重定向(路径改变,二次请求)

(3)chain:转发到action,一般不用,缓存问题

(4)redirectAction: 重定向到action

具体配置:

<result name="success" type="redirectAction">orders</result>
<!--orders为另外一个action的name属性值,也就是action的访问名称,可以加.action,也可以不加-->


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值