电商项目笔记之一:复杂一些的struts2配置(自定义拦截器)

本文介绍了Spring框架中自动扫描组件的方法及Struts框架中自定义包和拦截器的配置技巧,包括如何设置统一错误页面、自定义拦截器实现及使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一: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()





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值