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. MyArrayAdapter 比较标准的写法

    ; i < mString.size(); i++) { insert(mString.get(i), i); } } notifyDataSetChanged(); LogUtils.LOGD ...

  2. openfire3.9.1 开发配置

    1.在官网上下载最新的openfire源码  eg:openfire_src_3.9.1.zip  大概是一百多M 2.解压源码文件 一下步骤参考此同学的博客:http://redhacker.ite ...

  3. spring 以Ant Build方式运行build.xml文件,报warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds 的解决办法

    Buildfile: F:\experience\spring_pdf\sourcecode\example1\build.xml compile: [javac] F:\experience\spr ...

  4. sql cross join table

    A 表数据如下图所示 B表数据如下图所示

  5. iScroll.js几个问题及其解决办法

    1.在一个页面中需要点击tab切换,而且每个切换的内容都需要下拉刷新加载,这个时候需要在点击的时候用到myScroll.refresh();这个函数,刷新iScroll.js这个函数. 2.在页面中有 ...

  6. github 或者gitlab 设置添加SSH, 避免每次提交重复输入用户名

    克隆项目二种方式: 1. 使用https url克隆,   复制https url 然后到 git clone https-url 2.使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH ...

  7. node + nginx + mongo搭建负载均衡

    基于node和nignx和mongo搭建负载均衡 nginx配置: upstream back {                                                  # ...

  8. Linux解决Device eth0 does not seem to be present

    ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restartShutting down loopback insterface:  ...

  9. MVC中的模型

    为MVC Music Store 建模 建模代码: public class Album { public virtual int AlbumId { get; set; } public virtu ...

  10. Android近场通信---高级NFC(二)

    读写NFC标签 读写NFC标签,要涉及到从Intent对象中获取标签,并要打开与标签的通信.要读写NFC标签数据,你必须要定义自己的协议栈.但是,要记住在直接使用NFC标签工作时,你依然能够读写NDE ...