一 简单起步
1.web.xml 文件配置
<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-pattern>
</filter-mapping>
2.建一个action
1.struct2文件配置一个action
<action name="hello" class="helloWorldAction">
<result name="success">/HelloWorld.jsp</result>
</action>
[ action标记解析]
name:表示action的名称.struct根据name名来匹配请求,配备上交有配备的action处理
class:是action类名
result标记的name:表示result名称,action处理完成返回值与action标记内的name匹配,匹配上转到相应显示视图显示
2.建一个action类.
struct2的action是一个POJO类.视图传过来的参数通过action的get,set方法获取
通过继承
ActionSupport获的struct框架的一些支持,
获取session: ActionContext.getContext().getSession();
获取response:
HttpServletResponse resp = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
获取request:
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
3.一个action于多个请求匹配上
方法1.action内建n个方法
struct根据url的action name!方法名来匹配action的相应方法来处理
note:
struct2默认跟请求匹配的action的execute方法来处理,如果url请求没哟写方法名则execute方法来处理。
方法2.action名称通过适配符来匹配请求url.
<action name="*World" class="org.hwz.demo.action.WorldAction" method="{1}">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<result name="success">/HelloWorld.jsp</result>
</action>
请求是什么XXXXWorld,则action匹配上.使用action的XXX方法来处理
二 struct拦截器
1.使用struct提供拦截器
struct有提供一些常用的拦截器,如果时间,日志等。在action标记下添加
<interceptor>就ok
<action name="hello" class="helloWorldAction">
<interceptor-ref name="timer"/><!--时间拦截器-->
<interceptor-ref name="logger"/><!--日志拦截器-->
<result name="success">/HelloWorld.jsp</result>
</action>
2.使用拦截器堆栈
声明拦截器堆 ,在interceptors标记下声明interceptor-stack,相当于拦截器组合按照先进先执行
<interceptors>
<interceptor-stack name="appDefault">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<interceptor-ref name="demoInterceptors"/>
</interceptor-stack>
</interceptors>
在action配置使用拦截器堆
<action name="hello" class="helloWorldAction">
<interceptor-ref name="
appDefault"/><!--name为拦截器堆的名称-->
<result name="success">/HelloWorld.jsp</result>
</action>
3.创建自定义的拦截器
继承
AbstractInterceptor类实现
intercept方法
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("intercept");
return actionInvocation.invoke();//继续执行action
}
@Override
public void init() {
super.init(); //To change body of overridden methods use File | Settings | File Templates.
System.out.println("init");
}
@Override
public void destroy() {
super.destroy(); //To change body of overridden methods use File | Settings | File Templates.
System.out.println("destroy");
}
在struct.xml文件声明自定义的拦截器
<interceptors>
<interceptor name="demoInterceptors" class="org.hwz.demo.interceptor.DemoInterceptor"/>
</interceptors>
action 通过 <interceptor-ref name="demoInterceptors" >来使用该配置