Struts2拦截器初涉

正在练习struts,本例是从一个pdf上摘抄的例子,那本pdf都不知道叫什么名字,不过感觉很适合初学者。

在这里要实现一个简单的拦截器"GreetingInterceptor"。它的功能是在GreetingAction发生之前将其捕获,然后向其Action上下文的Session里面添加问候信息,供GreetingAction使用。

拦截器在GreetingAction发生之前将其捕获,并向其ActionContext假如名为greeting的问候字段信息。然后唤醒Action,使其得以继续执行。

拦截器的实现步骤

  1. 写拦截器类,主要是继承AbstractInterceptor这个抽象类;
  2. 实现拦截方法:String intercept(ActionInvocation invocation);
  3. 在拦截其中写拦截action之前的语句,invoke被拦截的action,然后写被拦截的action执行之后的语句
  4. 拦截器返回的String是被拦截的action返回的String或者其他逻辑视图名
  5. 在struts中配置拦截器和action

拦截器示例

package com.struts.learn;

import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; // 这里拦截器是继承AbstractInterceptor
public class GreetingInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 515557078869832178L; public void init() { }
public void destory() { } @Override
public String intercept(ActionInvocation invocation) throws Exception { // 取得action执行的上下文,注意这个上下文是被拦截的action的上下文,这个一定要清楚
ActionContext ac = invocation.getInvocationContext(); // 通过上下文获得request对象,此时请求拦截下来添加内容
HttpServletRequest request =
(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
String greeting = (hour < 6) ? "Good evening" :
((hour < 12)?"Good morning":
((hour < 18) ? "Good afternoon" : "Good evening")); // 从request获得对象name
String name = request.getParameter("name"); // 初始化greeting对象
greeting = name + " " + greeting; // 将信息放入session中
invocation.getInvocationContext().getSession().put("greeting", greeting); // 之前请求发到被拦截的action是有参数传递过来的,原来的action的成员name不会被自动填充
// 被拦截的action中的成员不会被赋值
invocation.getInvocationContext().getSession().put("name", name); // 这里就是被拦截的action的execute方法的执行地方
String result = invocation.invoke();
return result; }
}

拦截器的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 在包中导入Struts自带的配置文件strtus-default.xml -->
<package name="default" extends="struts-default"> <!-- 注册拦截器 -->
<interceptors>
<interceptor name="greeting" class="com.struts.learn.GreetingInterceptor"></interceptor>
</interceptors> <!-- 添加默认的拦截器栈,你自己定义的拦截器有可能覆盖struts默认的拦截器 -->
<default-interceptor-ref name="completeStack"></default-interceptor-ref> <!-- 配置自己定义的Action -->
<action name="helloworld" class="com.struts.learn.HelloWorld">
<result name="success">/WEB-INF/pages/hello.jsp</result>
<result name="input">name.jsp</result>
<!-- 前面的action的配置都是正常配置,下面这句则关联了拦截器和action类 -->
<interceptor-ref name="greeting"></interceptor-ref>
</action> </package>
</struts>

警告

十一月 02, 2016 9:18:18 下午 org.apache.struts2.components.Form evaluateExtraParamsServletRequest

警告: No configuration found for the specified action: 'helloworld.action' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

总结

  1. 拦截器先要在struts.xml中注册
  2. 拦截器和被拦截的action的关系是在struts.xml中配置的,
  3. 注意如何获得被拦截的action的request,response和session等Servlet API
  4. 调用invocation的invoke()方法

Struts2拦截器初涉的更多相关文章

  1. Struts2 拦截器配置以及实现

    @(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...

  2. struts2 拦截器

    拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...

  3. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  4. struts2拦截器

    一.自定义拦截器 struts2拦截器类似于servlet过滤器 首先定义一个拦截器这个拦截器实现了Interceptor接口: package cn.orlion.interceptor; impo ...

  5. Struts2拦截器模拟

    前言: 接触Struts2已经有一段时间,Student核心内容就是通过拦截器对接Action,实现View层的控制跳转.本文根据自身理解对Struts2进行一个Java实例的模拟,方便大家理解! 示 ...

  6. 浅谈Struts2拦截器的原理与实现

    拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...

  7. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

  8. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  9. Struts2拦截器原理以及实例

    一.Struts2拦截器定义 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. ...

随机推荐

  1. 数据库---MySQL常用函数总结

    一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x)    返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x)    返回大于或等于 ...

  2. 数据库---MySQL练习题及答案

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  3. junit测试框架

    import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Tes ...

  4. ExtJS笔记 Ext.Loader

    Ext.Loader is the heart of the new dynamic dependency loading capability in Ext JS 4+. It is most co ...

  5. go gomail

    package main //cmd: go get gopkg.in/gomail.v1 import ( "gopkg.in/gomail.v1" ) func main() ...

  6. Git 实战教程

    CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而大家工作的时候,用的都是自己的 ...

  7. WPF TabControl 隐藏标头

    1. 将每个 TabItem 的 Visibility 属性设置为 Visibility.Collapsed 即可隐藏标头 <TabItem Visibility="Collapsed ...

  8. 阅读廖雪峰老师git教程笔记

    1.首先git是目前世界上最先进的分布式版本控制系统之一.所谓版本控制是针对工作中一些普遍的现象的. 比如,你写一份文档,期间,不断的改善,每次修改都会进行备份,久而久之,会有很多版本的同一份文档,但 ...

  9. 使用Java字节流拷贝文件

    本文给出使用Java字节流实现文件拷贝的例子 package LearnJava; import java.io.*; public class FileTest { public static vo ...

  10. App Store有哪些原因会影响app应用上架呢?(分享)

    App Store对于应用上架的审核是非常严格的,很可能一个没有注意到的细节,或者一个你根本没想想到的原因就会导致你的应用上架失败.而排除这些无可避免的错误以外,还有一些导致应用上架失败的原因,非常常 ...