Java 框架 02 — Struts2_04(拦截器创建方式_3种_重要、配置文件_重要_拦截器相关注册、指定方法拦截)

0 回顾

0.1 OgnlContext

  • OgnlContext
    • Root:对象
    • ContextMap

0.2 Strut2与Ognl的结合

  • ValueStack
    • Root:栈。栈顶:xxAction
      • 取值:属性名
    • ActionContextMap
      • #key.属性名
  • 转发中值的传递
    • Action1 redirect Action2
      • <param name="参数名">${属性名}</param>

0.3 Struts2运行流程

  1. 进入核心过滤器
    1. 准备ValueStack
    2. 准备ActionContext
    3. 包装request对象 - getAttribute(key)
      • 取值
        1. request域中
        2. ValueStackRoot中取值
        3. ActionContext
  2. 执行20个拦截器,Interceptor
    • 递归方法
  3. 执行Action,得到resultCode
  4. 执行结果处理。4种
    1. dispatcher
    2. redirect
    3. chain
    4. redirectAction
  5. JSP显示

0.4 文件上传

  1. 表单设置
    1. enctype="multipart/form-data"
    2. method="post"
  2. 前端 <input type="file" name="file">
  3. Action提供File 类型 file属性
  4. 提供 fileFileName 属性,接收文件名
  5. 提供 fileContentType 属性,接收文件类
  6. FileUtils.copyFile(src, dest);
    • dest文件名通常是生成的不重复的字符串 uuid

一、自定义拦截器

1.1 拦截器的创建方式

1.1.1 方式一:实现Interceptor接口

  • 拦截器生命周期:随项目的启动而创建,随项目关闭而销毁。
package a_interceptor;

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

// 方式一:实现Interceptor接口
public class MyInterceptor1 implements Interceptor {
	@Override
	// 对象销毁时调用
	public void destroy() {
		
	}

	@Override
	// 对象创建初始化时调用
	public void init() {
		
	}

	@Override
	// 核心拦截方法
	public String intercept(ActionInvocation invocation) throws Exception {
		// Action前处理
		System.out.println("MyInterceptor1");
		
		// 放行 - 下一个拦截器
		invocation.invoke();
		
		// Action后处理
		// 返回值
		return null;
	}
	
}

1.1.2 方式二:继承AbstractInterceptor

  • 空实现了init()destroy(),可只实现intercept()方法
package a_interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

// 方式二:继承AbstractInterceptor类
public class MyInterceptor2 extends AbstractInterceptor {

	@Override
	// 核心拦截方法
	public String intercept(ActionInvocation invocation) throws Exception {
		// Action前处理
		System.out.println("MyInterceptor1");
		
		// 放行 - 下一个拦截器
		invocation.invoke();
		
		// Action后处理
		// 返回值
		return null;
	}
	
}

1.1.3 方式三!:继承MethodFilterInterceptor

  • 定制拦截器的拦截的方法
    • 定制哪些方法需要拦截
    • 定制哪些方法不需要拦截
package a_interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

// 方式三:继承MethodFilterInterceptor类
public class MyInterceptor3 extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("前处理");
		// 放行
		//invocation.invoke();
		
		System.out.println("后处理");
		// 放行后,返回值无效
		// 如果不放行,返回值取代的就是Action中的返回值,指定结果
//		return "error";
		return invocation.invoke();
	}
}

1.2 Action类

1.2.1 Demo1Action

package a_interceptor;

import com.opensymphony.xwork2.ActionSupport;

public class Demo1Action extends ActionSupport {
	public String add() {
		System.out.println("add");
		return SUCCESS;
	}
	public String delete() {
		System.out.println("delete");
		return SUCCESS;
	}
	public String update() {
		System.out.println("update");
		return SUCCESS;
	}
	public String find() {
		System.out.println("find");
		return SUCCESS;
	}
}

1.2.2 Demo2Action

package a_interceptor;

import com.opensymphony.xwork2.ActionSupport;

public class Demo2Action extends ActionSupport {
	public String add() {
		System.out.println("Demo2Action add");
		return SUCCESS;
	}
	public String delete() {
		System.out.println("Demo2Action delete");
		return SUCCESS;
	}
	public String update() {
		System.out.println("Demo2Action update");
		return SUCCESS;
	}
	public String find() {
		System.out.println("Demo2Action find");
		return SUCCESS;
	}
}

1.2.3 配置文件(重要!拦截器相关注册、指定方法拦截)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!-- 开发模式:热加载
		 struts.devMode = false -->
	<constant name="struts.devMode" value="true"></constant>
	
	
	<package name="interceptor" namespace="/" extends="struts-default">
		<!-- 1.注册拦截器 -->
		<interceptors>
			<interceptor name="inter1" class="a_interceptor.MyInterceptor3">
				<!-- 哪些方法拦截 -->	
				<param name="includeMethods">add,delete</param>
				<!-- 排除哪些方法,不进行拦截 -->
				<!-- <param name="excludeMethods">update,find</param> -->
			</interceptor>
			<!-- 2.注册拦截器栈 -->
			<interceptor-stack name="myStack">
				<!-- 自定义的拦截器,建议放在默认的20个拦截器之前 -->
				<interceptor-ref name="inter1"></interceptor-ref>
				<!-- 引入默认的20个拦截器 -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		
		<!-- 3.指定拦截器栈 -->
		<!-- 给当前包中所有的Action指定默认的拦截器栈 -->
		<default-interceptor-ref name="defaultStack"></default-interceptor-ref>
		
		<action name="Demo1Action_*" class="a_interceptor.Demo1Action" method="{1}">
			<!-- 给Action单独指定拦截器栈 -->
			<interceptor-ref name="myStack"></interceptor-ref>
			<result name="success">/success.jsp</result>
			<result name="error">/form.jsp</result>
		</action>
        
		<action name="Demo2Action_*" class="a_interceptor.Demo2Action" method="{1}">
			<result name="success">/success.jsp</result>
		</action>
	</package>
	<package name="tag" namespace="/" extends="struts-default">
		<action name="tag" class="b_tag.TagAction">
			<result>/tag1.jsp</result>
		</action>
	</package>
	
	
</struts>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值