struts2-拦截器的学习

本文深入解析Struts2框架中的拦截器概念,包括其工作原理、配置方式及如何实现。通过实例展示拦截器在Action调用过程中的作用,以及如何配置拦截器栈和默认拦截器。

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

1.拦截器的概述

拦截器是Struts2的核心组成部分,他可以动态拦截Action调用的对象,类似于Servlet中的过滤器。

2.拦截器的工作原理

拦截器是以代理方式调用的,他在一个Action执行前后进行拦截,围绕着Action和Result的执行而执行。
首先执行Action配置的拦截器,Action和Result执行之后,拦截器再次执行。
拦截器工作原理

3.拦截器的配置

  1. 拦截器
	//配置拦截器
	<interceptor name="interceptorName" class="interceptorClass">
		<param name="paramName">paramValue</param>
	</interceptor>
  1. 拦截器栈
    拦截器栈是由多个拦截器构成的。
    定义拦截器栈用interceptors元素和interceptor-stack子元素,配置多个拦截器时使用interceptor-ref元素。
		<interceptors>
			<interceptor-stack name="interceptorStackName">
				<interceptor-ref name="interceptorName1">
				<interceptor-ref name="interceptorName2">
				<interceptor-ref name="interceptorName3">
				......
			</interceptor-stack>
		</interceptors>
  1. 默认拦截器
    默认拦截器可以对指定的包中所有的Action都能起到拦截的作用。配置默认拦截器使用default-interceptor-ref元素。
	//name必须是已存在的拦截器或者拦截器栈
	<default-interceptor-ref name="name">
  1. 拦截器的简单实现
  • index.jsp
	 <%@ taglib prefix="s" uri="/struts-tags"%>

<s:form action="testAction">
		<s:textfield label="msg" name="message"></s:textfield>
		<s:submit value="提交"></s:submit>
	</s:form>
  • struts.xml
	<package name="hello" namespace="/" extends="struts-default">
			<action name="testAction" class="com.action.InterceptorAction">
			<result name="success">/success.jsp</result>
			
			<!-- 如果使用系统其他拦截器,该Action的默认拦截器会消失,必须手动添加默认拦截器 -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
			
			<!--配置token拦截器(令牌拦截器,避免重复提交)  -->
			<interceptor-ref name="token"></interceptor-ref>
			<result name="invalid.token">/error.jsp</result>
		</action>
	</package>
  • InterceptorAction.java
	public class InterceptorAction extends ActionSupport{
	private static final long serialVersionUID = 1L;
	private String message;
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	@Override
	public String execute() throws Exception {
		System.out.println("页面提交的message");
		Thread.sleep(1000);
		System.out.println(message);
		return SUCCESS;
	}
}
  • error.jsp和success.jsp页面自己添加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值