概述(版本:struts2.3.10):
框架的底层很多都会用到反射技术
过滤器在程序启动的时候创建,创建过滤器会执行init方法()
②、filter拦截,读取url,得到action名字hello
③、在src找struts.xml,利用dom4j解析xml中的配置,找到<action name="hello">的节点,读取得到action全路径(class属性)
④、利用反射技术执行Action的默认方法execute:
extends:一定继承struts-default才具有action的功能
namespace:namespace的值和action的name属性构成url的路径
method:默认值就是execute,则直接action类中的execute方法
(1)dispatcher转发(浏览器路径不变,一次请求)--默认值
(2)redirect重定向(路径改变,二次请求)
(3)chain:转发到action,一般不用,缓存问题
框架的底层很多都会用到反射技术
过滤器在程序启动的时候创建,创建过滤器会执行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,也可以不加-->