struts demo —— 认识拦截器

在上一个 demo 的基础上,实现了拦截器。

MyInterceptor.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.demo;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class MyInterceptor implements Interceptor {
	
	private String hello="1";

	public String getHello() {
		return hello;
	}

	public void setHello(String hello) {
		this.hello = hello;
	}

	@Override
	public void destroy() {
		System.out.println("destroy"); 	
	}

	@Override
	public void init() {
		System.out.println("init"); 
	}

	@Override
	public String intercept(ActionInvocation invoker) throws Exception {
		//invoke() 方法,若有多个拦截器,执行此方法后则调用下一个拦截器。若无,则返回给视图
		String result=invoker.invoke();
		System.out.println(result+","+hello); 
		return result;
	}


}

struts.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="any" extends="struts-default" namespace="/">  	 
	
		<interceptors>
			<!-- 定义拦截器 -->
			<interceptor name="interceptor_test" class="com.demo.MyInterceptor">
				<!-- 设置拦截器初始化时的参数 -->
				<param name="hello">world</param>
			</interceptor>
			
			<!-- 把定义的拦截器加入到拦截链(栈) -->
			<interceptor-stack name="mystack">
				<interceptor-ref name="interceptor_test"></interceptor-ref>
				<!-- 此为 struts2 默认的拦截器栈,必须手动将其引入。 -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		
		<!-- 设置默认拦截器 ,设置后,每个 action 都会被该拦截器拦截 -->
		<!-- <default-interceptor-ref name="mystack"></default-interceptor-ref> -->
		
		<action name="logindo" class="com.demo.UserAction" method="execute"> 
			<!-- 插入拦截器 -->
			<interceptor-ref name="mystack"></interceptor-ref>
			<result name="success">success.jsp</result>  
			<result name="fail">fail.jsp</result>   

		</action>  
	</package>  
</struts>

其他代码不变。则实现了 struts2 的核心,拦截器。