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. request实现页面包含

    package cn.itcast.request; import java.io.IOException; import javax.servlet.ServletException; import ...

  2. ThinkPHP3.2.3 自定义标签库的使用

    ThinkPHP 3.2.3 手册中标签库驱动的地址是: http://www.kancloud.cn/manual/thinkphp/1859 标签库的地址是:http://www.kancloud ...

  3. Redis和Memcache对比及选择(转载)

  4. PHP->利用GD库新建图像

    1.确认php中GD库是否开启 在PHP配置文件php.ini中查找extension=php_gd2.dll,去掉前边的(分号) ';' 即可,一般php是默认开启的 2.绘画步骤 创建一个画布(画 ...

  5. LoadRunner,一个简单的例子

    一.录制脚本,这个就不说了,但是可以说说录完一个简单的脚本之后可以做的一些后续工作 1.设置事务的开始跟结束点(参考他人的http://www.cnblogs.com/fnng/archive/201 ...

  6. rabbitMQ集群部署以及集群之间同步

    MQ集群部署 期待的部署架构 其中,一个机房有两台机器部署MQ,并组成集群,有一个机房的MQ集群作为中心集群,其他机房的MQ集群将消息同步到中心MQ集群中. 安装erlang,略.. 安装rabbit ...

  7. Python中的函数修饰符@

    首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装.比如有以下两个函数: 复制代码 def func1(): print 'I am function func1' def func2(): ...

  8. CSS样式 让你的输入的小写自动变成大写。

    1.transform:uppercase  参考:http://www.w3school.com.cn/cssref/pr_text_text-transform.asp 2.可以让你实现输入的小写 ...

  9. C++之路进阶——codevs2933(诗人小G)

    2933 诗人小G 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 小G是一个出色的诗人 ...

  10. 记录一下我使用的vim的配置文件

    还不是很完美: "au BufReadPost * if line("'\"") > 0|if line("'\"") &l ...