Struts2拦截器

1.Struts2拦截器

1.1 基于类范围的连接器的自定义和使用

  • Struts2连接器的体系结构
  • Struts2内建连接器
  • 自定义基于类范围的连接器
  • 案例:通过自定义连接器实现日志记录

1.2 任务实现思路

如何自定义和使用拦截器?

  • 编写拦截器组件类,该类可以实现Intereptor接口,或者继承AbstractInterceptor,MethodFilterInteceptor
  • 声明自定义的拦截器组件类
<interceptors>
			<interceptor name="show" class="cn.zhengbin.interceptor.MyInterceptor" />
</interceptors>
  • 开启动态方法调用
<action name="message" class="cn.zhengbin.action.ValidateLoginAction" method="message">
			<result name="success">/message.jsp</result>
			<interceptor-ref name="show" />
    
			<interceptor-ref name="defaultStack" />
</action>

使用自定义的拦截器组件类药注意的事项:

  • 当在< action>元素添加了< interceptor-ref>引用后,框架不会再调用defaultStack拦截器栈,这样会破坏框架的功能
  • 因此,需要将defaultStack显示引用一下
<interceptor-ref name="defaultStack" />

1.2.1 编写拦截器组件类MyInterceptor

package cn.zhengbin.interceptor;

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

public class MyInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invoke) throws Exception {
		System.out.println("页面展示之前");

		String result = invoke.invoke();
		System.out.println("页面展示完成");
		
		System.out.println("页面展示之后");

		return result;
	}

}

1.2.2 声明自定义的拦截器组件类

<?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>
	<!-- 增加1:动态方法调用功能开启 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<package name="login" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="show" class="cn.zhengbin.interceptor.MyInterceptor" />
		</interceptors>
		<action name="fieldValidate_login" class="cn.zhengbin.action.ValidateLoginAction">
			<result name="input">/login.jsp</result>
			<result name="success">/main.jsp</result>
		</action>
		<action name="message" class="cn.zhengbin.action.ValidateLoginAction"
			method="message">
			<result name="success">/message.jsp</result>
			<interceptor-ref name="show" />
			
			<interceptor-ref name="defaultStack" />
		</action>
	</package>
</struts>   

1.2.3 编写message.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'message.jsp' starting page</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->]
	<style>
		*{
			margin: 0;
			padding: 0;
		}
		a{
			text-decoration: none;
			color: #126bae;
		}
		p{
			margin-top: 20px;
			font-size: 50px;
			color: #f00;
			padding: 5vw;
			text-align: center;
		}
	</style>

  </head>
  
  <body>
    <p> 
    	<a href="https://hanyu.baidu.com/shici/detail?pid=649354df3ab5482c9a82c69433a6dad4&from=kg0" target="_blank">《观沧海》</a><br/>
    	曹操<br/>
    	东临碣石,以观<a href="https://baike.baidu.com/item/%E6%B2%A7%E6%B5%B7/12512?fr=aladdin" target="_blank">沧海</a>。<br/>
		水何澹澹,山岛竦峙。<br/>
		树木丛生,百草丰茂。<br/>
		秋风萧瑟,洪波涌起。<br/>
		日月之行,若出其中。<br/>
		星汉灿烂,若出其里。<br/>
		幸甚至哉,歌以咏志。<br/>
	</p>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值