struts2学习笔记之十三:自定义过滤器

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>
时间: 2024-12-15 18:59:59

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

struts2学习笔记之十三(表单标签和非表单标签)

表单标签 这些UI标签都可以指定cssClass,cssStyle来指定CSS样式,而且可以指定大量的onXxx属性,用于绑定JS函数 form : 表单 head :引入一些辅助的css样式单和js脚本 hidden :隐藏域 label :生成一个标签 password : 生成一个密码框 select :列表框 checkbox : 只是生成一个复选框 radio :不是生成一个单选框 file :生成一个文件上传域 textfield :单行文本域 textarea :多行文本域 sub

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

angular学习笔记(二十三)-$http(1)-api

之前说到的$http.get和$http.post,都是基于$http的快捷方式.下面来说说完整的$http: $http(config) $http接受一个json格式的参数config: config的格式如下: { method:字符串 , url:字符串, params:json对象, data:请求数据, headers:请求头, transformRequest:函数,转换post请求的数据的格式, transformResponse:函数,转换响应到的数据的格式, cache:布尔

【Unity 3D】学习笔记三十三:游戏元素——天空盒子

天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天,让人惊叹不已.其实天空这个效果没有什么神秘的只需用到天空盒子这个组件就行,可以将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和所有的游戏元素包含其中.在unity中制作天空盒子非常方便,只需要像设置其他组件一样设置下就行了.在制作天空盒子之前,我们需要搜集一些天空的贴图,不过,unity很方便的为开发者提供了天空盒子的资源包.首先在project视图中点击鼠标右键,然后选择import package--skyboxes即可添加天空盒子的资

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

原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中,将会有很好的基础. 但是由于客户安装的Office版本不一,所以VSTO项目的部署问题显得尤为重要,需要考虑很多问题. 测试代码下载 本系列所有测试代码均在Visual Studio 2010 Ultimate SP1 + Office 2010 Professional Plus x64 SP1

UI学习笔记---第十三天可视化设计 XIB, StoryBoard

一.XIB Xib是一种苹果提供的快速构建界面的编程方式,主要是为了简化MVC中的V的构建 Xib提供可视化的编辑界面,能大大提升页面布局效率 Xib常用操作 为控件关联事件 为空间指定delegate 为控件关联实例变量或者属性 二.StoryBoard的使用 StoryBoard的注意事项 在AppDelegate的-application: didFinishLaunchingWithOptions: 的方法中不要再用代码初始化一个window 将创建好的StoryBoard在应用程序配置

struts2学习笔记(一)—— 知识点扫描

一.struts2的核心部件 (1)Configuration (2)Action (3)Interceptor (4)Value Stack / OGNL (5)Result Types (6)Results / View Technology 二.architectural goals: (1)separation  of concerns (2)loose coupling (3)testability (4)modularization (5)convention over config

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样

struts2学习笔记(二)—— 获取登录信息及计算在线人数

实现目的: 1.点击"Login"的超链接,进入登录页面 2.填写登录信息,提交表单,将用户信息保存进Session 3.显示用户名,并计算在线人数 4.点击"Logout"的超链接,在线人数减一,并使Session失效 Struts2实现: 1.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:/