Struts2拦截器浅析(一)
来源:互联网 发布:linux 用户配置文件 编辑:程序博客网 时间:2024/05/02 02:54
拦截器简介
什么是拦截器
Struts2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能,如数据转移、类型转换、数据校验等
拦截器方法在Action执行之前或者之后执行
拦截器栈
- 从结构上看,拦截器栈相当于多个拦截器的组合
- 从功能上看,拦截器栈也是拦截器
拦截器的执行过程是一个递归的过程。类似于Servlet的过滤器。
自定义拦截器
方式一:实现Interceptor接口
- void init() : 初始化拦截器所需资源
- void destroy() : 释放在init()中分配的资源
- String intercept(ActionInvocation ai) throws Exception
- 实现拦截器功能
- 利用ActionInvocation参数获取Action状态
- 返回result字符串作为逻辑视图
方式二:继承AbstractInterceptor类
- 提供了init()和destroy()方法的空实现
- 只需要实现interceptor方法即可
拦截器示例
计算Action的执行时间:执行之后的时间 - 执行之前时间 = 执行Action消耗时间
实现步骤:
- 创建拦截器
- 在配置文件中定义拦截器并引用它
第一个拦截器示例
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <login-config> <auth-method>BASIC</auth-method> </login-config></web-app>修改页面index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>计算执行Action花费的时间</title> </head> <body> <a href="timer">访问Action并计算执行Action花费的时间</a> </body></html>创建Action
package com.lijy.action;import com.opensymphony.xwork2.ActionSupport;public class TimerAction extends ActionSupport { @Override public String execute() throws Exception { for (int i = 0; i < 10000; i++) { System.out.println("I love me"); } return SUCCESS; }}创建struts.xml
<?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> <package name="default" namespace="/" extends="struts-default"> <action name="timer" class="com.lijy.action.TimerAction"> <result>/success.jsp</result> </action> </package> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <constant name="struts.devMode" value="true"></constant></struts>测试跳转: http://localhost:8080/HelloStruts2_2/
创建拦截器
package com.lijy.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/** * 计算并执行Action花费的时间 */public class TimerInterceptor extends AbstractInterceptor { //1.自动调用此方法进行拦截器操作 //2.在struts.xml中进行配置 注册拦截器,引用拦截器 @Override public String intercept(ActionInvocation invocation) throws Exception { //1.执行Action之前 long start = System.currentTimeMillis(); //2.执行下一个拦截器,如果已经是最后一个拦截器,则执行目标Action String result = invocation.invoke(); //3.执行Action之后 long end = System.currentTimeMillis(); System.out.println("执行Action花费的时间:" + (end - start) + "ms"); return result; }}在struts.xml中注册拦截器
<?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> <package name="default" namespace="/" extends="struts-default"> <!-- 1.注册拦截器 --> <interceptors> <interceptor name="mytimer" class="com.lijy.interceptor.TimerInterceptor"></interceptor> </interceptors> <action name="timer" class="com.lijy.action.TimerAction"> <result>/success.jsp</result> <!-- 2.引用拦截器 --> <interceptor-ref name="mytimer"></interceptor-ref> </action> </package> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <constant name="struts.devMode" value="true"></constant></struts>
阅读全文
0 0
- Struts2拦截器浅析(一)
- Struts2--拦截器浅析
- Struts2拦截器浅析
- Struts2拦截器浅析(二)
- struts2-拦截器(一)
- Struts2 拦截器(一)
- Struts2之拦截器浅析
- Struts2拦截器(一)
- struts2拦截器(一)
- Struts2拦截器篇(一)
- 框架(一)struts2--拦截器
- Struts2 拦截器详解(一)
- Struts2 拦截器详解(一)
- Struts2 拦截器详解(一)
- Struts2—拦截器(一)
- struts2源码浅析(一)
- struts2中拦截器的使用(一)
- Struts2核心(一):执行线路与拦截器
- 1205: 杨八方的英语问题
- 游戏框架的一些思考
- fire!--两次bfs
- 2017年10月28日 第十九次总结
- Struts2_007_Servlet API解耦的访问方式web资源之Aware
- Struts2拦截器浅析(一)
- HTTP状态码的含义
- 科大讯飞刘庆峰:AI要改变世界,算法、大数据、行业专家缺一不可丨1024开发者节
- redis事务
- SpringMVC之分析RequestMappingHandlerAdapter(二)
- TCP/IP编程之connect函数与accept函数的关系
- Android 屏幕旋转(二):屏幕旋转activity重建问题
- C++中如何定义动态数组
- Unity3D游戏场景之控制模型移动、旋转和相机跟随