Struts2拦截器初涉
Struts2拦截器初涉
正在练习struts,本例是从一个pdf上摘抄的例子,那本pdf都不知道叫什么名字,不过感觉很适合初学者。
在这里要实现一个简单的拦截器"GreetingInterceptor"。它的功能是在GreetingAction发生之前将其捕获,然后向其Action上下文的Session里面添加问候信息,供GreetingAction使用。
拦截器在GreetingAction发生之前将其捕获,并向其ActionContext假如名为greeting的问候字段信息。然后唤醒Action,使其得以继续执行。
拦截器的实现步骤
- 写拦截器类,主要是继承AbstractInterceptor这个抽象类;
- 实现拦截方法:String intercept(ActionInvocation invocation);
- 在拦截其中写拦截action之前的语句,invoke被拦截的action,然后写被拦截的action执行之后的语句
- 拦截器返回的String是被拦截的action返回的String或者其他逻辑视图名
- 在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.
总结
- 拦截器先要在struts.xml中注册
- 拦截器和被拦截的action的关系是在struts.xml中配置的,
- 注意如何获得被拦截的action的request,response和session等Servlet API
- 调用invocation的invoke()方法
Struts2拦截器初涉的更多相关文章
- Struts2 拦截器配置以及实现
@(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...
- struts2 拦截器
拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- struts2拦截器
一.自定义拦截器 struts2拦截器类似于servlet过滤器 首先定义一个拦截器这个拦截器实现了Interceptor接口: package cn.orlion.interceptor; impo ...
- Struts2拦截器模拟
前言: 接触Struts2已经有一段时间,Student核心内容就是通过拦截器对接Action,实现View层的控制跳转.本文根据自身理解对Struts2进行一个Java实例的模拟,方便大家理解! 示 ...
- 浅谈Struts2拦截器的原理与实现
拦截器与过滤器 拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...
- 基于SSH2框架Struts2拦截器的登录验证实现(转)
大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证. 修改数 ...
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
- Struts2拦截器原理以及实例
一.Struts2拦截器定义 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. ...
随机推荐
- 数据库---MySQL常用函数总结
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于 ...
- 内省操作javabean的属性
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...
- Apache Spark源码走读之24 -- Sort-based Shuffle的设计与实现
欢迎转载,转载请注明出处. 概要 Spark 1.1中对spark core的一个重大改进就是引入了sort-based shuffle处理机制,本文就该处理机制的实现进行初步的分析. Sort-ba ...
- MVC应用程序中,怎样控制与复制相同的功能
先看此篇<MVC程序实现Autocomplete功能> http://www.cnblogs.com/insus/p/3546255.html 它是实现使用jQuery实现文本框输入文字, ...
- 【翻译】How To Tango With Django 1.5.4 第四章
4.模板和静态媒体 这章讲解模板引擎 4.1使用模板 前面我们讲解了view和url 映射,创建出了django 的web页面,现在就要将模板混合进去 好的网站在布局上总是有许多重复的.django提 ...
- loadrunner generators (controller in windows)
http://my.oschina.net/u/2391658/blog/735690 http://blog.csdn.net/xu1314/article/details/7455114 http ...
- Linux内核设计第三周——构造一个简单的Linux系统
Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...
- ASP.NET MVC视图中的@Html.xxx(...)
问题 在视图页中@Html.xxx(...)是什么?如何被执行? 如下图所示: 解疑 视图页中@Html.xxx(...)涉及的内容有: 视图页被编译后的类继承自 WebViewPage<T&g ...
- jQuery源代码阅读之二——jQuery静态属性和方法
一.jQuery.extend/jQuery.fn.extend //可接受的参数类型如下:jQuery.extend([deep],target,object1,[objectN]) jQuery. ...
- 【转】PHP实现连贯操作
[第一种方案 __call] 我们在使用一些框架(如ThinkPHP)编码的时候,常用到这样的代码. M('User')->where(array('id'=>1))->field( ...