Struts2的拦截器
1、Struts2的拦截器只能拦截Action,拦截器是AOP的一种思路,可以使我们的系统架构
更松散(耦合度低),可以插拔,容易互换,代码不改变的情况下很容易满足客户需求
其实体现了OCP
 
2、如何实现拦截器?(整个拦截器体现了责任链模式,Filter也体现了责任链模式)
* 继承AbstractInterceptor(体现了缺省适配器模式,建议使用该模式)
* 实现Interceptor
 
3、如果自定了拦截器,缺省拦截器会失效,必须显示引用Struts2默认的拦截器
 
4、拦截器栈,多个拦截器的和
 
5、定义缺省拦截器<default-interceptor-ref>,所有的Action都会使用
 
6、拦截器的执行原理,在ActionInvocation中有一个成员变量Iterator,这个Iterator中保存了所有的
拦截器,每次都会取得Iterator进行next,如果找到了拦截器就会执行,否则就执行Action,都执行完了
拦截器出栈(其实出栈就是拦截器的intercept方法弹出栈)
 
自定义拦截器myLogInterceptor.java
package com.djoker.struts2;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class myLogInterceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("记录日志开始"); String recode = invocation.invoke(); System.out.println("记录日志结束"); return recode;
} }
struts.xml配置拦截器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts>
<package name="user" extends="struts-default" namespace="/user">
<interceptors>
<!-- 声明过滤器 -->
<interceptor name="mylog" class="com.djoker.struts2.myLogInterceptor"></interceptor>
<!-- 使用站方式声明过滤器 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="mylog"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认拦截器,如果没有指定则使用该拦截器 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<global-exception-mappings>
<exception-mapping result="error" exception="com.djoker.struts2.UserNotFoundException"></exception-mapping>
</global-exception-mappings>
<action name="*User" class="com.djoker.struts2.UserAction" method="{1}User">
<!-- 普通配置,但是每个Action都需要配置
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="mylog"></interceptor-ref>
-->
<!--
<interceptor-ref name="mylog"></interceptor-ref>
-->
<exception-mapping result="error" exception="com.djoker.struts2.UserNotFoundException"></exception-mapping>
<result>/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>

struts2学习笔记之十三:自定义过滤器的更多相关文章

  1. Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力

    过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...

  2. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  3. VSTO 学习笔记(十三)谈谈VSTO项目的部署

    原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中, ...

  4. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  5. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  6. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  7. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  8. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  9. LevelDB 学习笔记1:布隆过滤器

    LevelDB 学习笔记1:布隆过滤器 底层是位数组,初始都是 0 插入时,用 k 个哈希函数对插入的数字做哈希,并用位数组长度取余,将对应位置 1 查找时,做同样的哈希操作,查看这些位的值 如果所有 ...

随机推荐

  1. loop 循环和检测点 9.3

    loop 指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址.对 IP 的修改范围都为:-128~127. 指令格式:loop 标号 操作: (cx)=(cx)- ...

  2. Object 转化为String时的一个问题 null->"null"

    近日在工作出了一个较大的问题,导致被客户投诉. 事情大致是,某个功能里新增对用户手机的修改,在平台数据同步过程中,出现了将用户以前的要同步的数据,那时还没有手机号码所以是null,新功能上线后,将手机 ...

  3. php怎么解决超链接中的中文参数转码问题?

    如题,我需要通过前端的网页传递一个中文参数(如:电脑)给后端的PHP文件,传递方式是通过超链接 "index.php/search/keyword/电脑" ,很明显的中文在传递过程 ...

  4. Cauchy 级数浓缩判别法

  5. 清除路由器NAT地址转换

    首先当你的NAT网络地址转换成功搭建起来,并且测试过网络通信时,此时NAT地址转换表上面是存在转换信息的,你可以通过在特权模式下输入命令"show ip nat translation&qu ...

  6. 一个实现了View接口的Fragment

    小程序并不新鲜,模式上先有百度轻应用,后有支付宝的各类小服务,再来还有腾讯自家QQ右下角的应用宝:技术上也就是FaceBook RN的那一套.一个技术上无创新,形式上无创意的事物,凭什么勾起了开发者们 ...

  7. getline函数彻底说明

    因为之前每次使用这个函数都要在网上查一遍,觉得很麻烦,这次就认真地整理一下,希望写完之后就记住. getline函数其实有两个: 一个是全局函数,include<cstring>, 原型是 ...

  8. 使用Prism6 建立 Windows 10 通用程序.

    使用Prism6 建立 Windows 10 通用程序. 目标: 使用prism6,建立Windows 通用程序项目. 1, 解决方案—添加新建项目—通用—空白应用—输入名称—确定—确定 2 ,引用上 ...

  9. armv6, armv7, armv7s的区别

    ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是 ...

  10. java-内省与javabean

    JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...