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>