一:spring自动查找包
这个原来学过, 在spring配置文件里加入下边的配置
<context:annotation-config/>
<context:component-scan base-package="com.xxx"/>
就省得一个一个的注入了
二:package父类
原来都是直接继承于 extends="struts-default"
这个项目里是自己定义了一个父类,用于action具体配置的继承
<package name="shop.admin" namespace="/admin" extends="shop-default">
这样自定义的父类里边可以统一管理一些东西
比如统一的错误页面等等, 等于在继承"struts-default"之前多了一层继承
<struts>
<!-- OGNL可以使用静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<package name="shop-default" abstract="true" extends="struts-default">
<global-results>
<!-- 错误页面 -->
<result name="error">/WEB-INF/pages/common/show_error.jsp</result>
<!-- 程序主页面 -->
<result name="index" type="redirectAction">index</result>
<!-- 后台管理主页面 -->
<result name="manager">/WEB-INF/pages/admin/main.jsp</result>
<!--会员注册 -->
<result name="reg">/WEB-INF/pages/user/customer_reg.jsp</result>
<!--会员登录-->
<result name="customerLogin">/WEB-INF/pages/user/customer_login.jsp</result>
<!--管理员登录-->
<result name="userLogin">/WEB-INF/pages/admin/user/user_login.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="com.lyq.util.AppException"></exception-mapping>
</global-exception-mappings>
</package>
</struts>
三:自定义拦截器
还可以在自定义的父类里,自定义拦截器堆栈,
堆栈里先执行一个自定义的拦截器 然后是默认的拦截器堆栈
<!-- 配置拦截器 -->
<interceptors>
<!-- 验证用户登录的拦截器 -->
<interceptor name="loginInterceptor" class="com.lyq.action.interceptor.UserLoginInterceptor"/>
<interceptor-stack name="adminDefaultStack">
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
自定义拦截器的实现
原来只会调用系统的拦截器, 这个是实现查找session中登录信息的, 就不用在前台做判断了, 这能统一管理
public class UserLoginInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 获取ActionContext
ActionContext context = invocation.getInvocationContext();
// 获取Map类型的session
Map<String, Object> session = context.getSession();
// 判断用户是否登录
if(session.get("admin") != null){
// 调用执行方法
return invocation.invoke();
}
// 返回登录
return BaseAction.USER_LOGIN;
}
}
这儿override了intercept方法, 还有一种拦截方法的拦截器要override方法:doIntercept()