1、首先strtus配置文件,这里我也就不做详细介绍了,反正是模板,也就给一个模板把
<constant name="struts.ui.theme" value="simple"></constant>
<constant name="struts.devMode" value="true"/>
<constant name="struts.action.extension" value="do"></constant>
<package name="members" namespace="/ld" extends="json-default">
<global-results>
<result name="close">/close.jsp</result>
<result name="errorMsg">/errorMsg.jsp</result>
<result name="404">/notFound.jsp</result>
</global-results>
<!-- 页面报错 -->
<global-exception-mappings>
<exception-mapping result="errorMsg" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="membersAction_*" class="membersAction" method="{1}">
</package>
</struts>
struts拦截器
这里有两种拦截器配置方式,一种全局,一种局部。
<div> <struts>
<constant name="struts.devMode" value="true"></constant>
<package name="mydefaultpackage" extends="struts-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="demo1Interceptor" class="com.itheima.interceptors.Demo1Interceptor"/>
<interceptor name="loginCheckInterceptor" class="com.itheima.action.LoginCheckInterceptor"/>
<interceptor name="loginCheck1Interceptor" class="com.itheima.action.LoginCheck1Interceptor"/>
<interceptor name="costTimeInterceptor" class="com.itheima.action.CostTimeInterceptor"/>
<!-- 定义一个小组: 拦截器栈-->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="costTimeInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 覆盖默认的拦截器栈 -->
<default-interceptor-ref name="mydefault"></default-interceptor-ref>
</package>
<package name="p1" extends="mydefaultpackage">
<action name="demo1" class="com.itheima.action.Demo1Action" method="m1">
<result>/1.jsp</result>
</action>
<action name="*" class="com.itheima.action.Demo2Action" method="{1}">
<!-- 一旦只认拦截器,默认拦截器将不起作用。
<interceptor-ref name="loginCheck1Interceptor">
注入参数:参数值可以用逗号分隔
<param name="excludeMethods">query</param>
</interceptor-ref>
-->
<result name="login">/login.jsp</result>
</action>
</package>
</struts>
</div>
那么如何编写拦截器呢,看下面的列子就有了。
public class Demo1Interceptor extends AbstractInterceptor {
//返回值:最终目标的返回值。就是一个结果逻辑视图。对应struts.xml中的result
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("拦截前");
String rtValue = invocation.invoke();//放行
System.out.println("拦截后");
return rtValue;
}
}
注意:也许在这里你只看到了你ActionInvocation 类只有放行的方法,其实不然,它的功能强大着呢,具体看国家电网权限管理项目。
首先存取地点分为两个一个是value stack ,contextMap
如何把值放到value stack中呢
ServletActionContext.getContext().getValueStack().push(object);
还有一种方式request中的值是contextmap中的
我感觉值栈 与 value stack的主要区别在于value stack比值栈少了一寸,通过去值栈中的值要用#号,
contextmap中的数据
key | value | 备注 |
application | ServeltContext中的所有属性attributes | 相当于EL的内置对象applicationScope |
session | HttpSession中的所有属性attributes | 相当于EL的内置对象sessionScope |
value stack(根) | 他是一个List |
|
action | 动作类 |
|
request | ServletRequest中的所有属性 | 相当于EL的内置对象requestScope |
parameters | Map map= request.getParameterMap() | 相当于EL的内置对象paramValues |
attr | 从四大域范围中搜索 | ${} |