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

拦截器示例

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

拦截器的配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.dtd">
  5. <struts>
  6. <!-- 在包中导入Struts自带的配置文件strtus-default.xml -->
  7. <package name="default" extends="struts-default">
  8. <!-- 注册拦截器 -->
  9. <interceptors>
  10. <interceptor name="greeting" class="com.struts.learn.GreetingInterceptor"></interceptor>
  11. </interceptors>
  12. <!-- 添加默认的拦截器栈,你自己定义的拦截器有可能覆盖struts默认的拦截器 -->
  13. <default-interceptor-ref name="completeStack"></default-interceptor-ref>
  14. <!-- 配置自己定义的Action -->
  15. <action name="helloworld" class="com.struts.learn.HelloWorld">
  16. <result name="success">/WEB-INF/pages/hello.jsp</result>
  17. <result name="input">name.jsp</result>
  18. <!-- 前面的action的配置都是正常配置,下面这句则关联了拦截器和action类 -->
  19. <interceptor-ref name="greeting"></interceptor-ref>
  20. </action>
  21. </package>
  22. </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. C# Image 、 byte[] 、Bitmap之间的转化

    一.Byte[] 转 System.Drawing.Bitmap public static Bitmap CreateBitmap(byte[] originalImageData, int ori ...

  2. Cocoapods配置

    这真是蛋疼的东西,配置了几次,每次都不同,每次都折腾半天.这一段时间应该不会变了,记录下来. 一 换源 看了教程都说官方源https://rubygems.org/不能访问,我特意点了一下,发现能访问 ...

  3. 关于Matrix的深入理解(对应值的功能)

    matrix是css3里面transform的一个集成表达式,它是以一个矩阵的方式来计算 transform:translate(apx,bpx)位移 transform: scale(a,b) 放缩 ...

  4. scala基础语法(变量,数据类型,函数)

    一:常量与变量 1.常量 2.两种变量定义方式(严格与不严格) 3.Float注意点 3.注意点 变量名后加上: 类型首字母是大写 4.占位符_ 但是需要制定类型 5.scala数据类型 6.其他类型 ...

  5. iOS摄像头和相册-UIImagePickerController常用操作

    在一些应用中,我们需要用到iOS设备的摄像头进行拍照,视频.并且从相册中选取我们需要的图片或者视频. 关于iOS摄像头和相册的应用,可以使用UIImagePickerController类来完成控制. ...

  6. 关于TCP/IP的三次握手和四次挥手解释

    TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  7. RDIFramework.NET平台代码生成器V2.8发布-更新于2014-12-31(提供下载)

    RDIFramework.NET平台代码生成器V2.8发布  更新于2014-12-31 注:已经发布了新版本,请转新版本下载: RDIFramework.NET平台代码生成器V3.0版本全新发布-更 ...

  8. 使用@Configuration注解来代替Spring的bean配置

    下面是一个典型的Spring配置文件(application-config.xml): <beans> <bean id="orderService" class ...

  9. C#.Net 中的 new 的几个用法

    之前面试的时候,有人问过我这个问题,当时自己只记得两种.后来上msdn看了下,发现有三种,第三种用法基本没怎么用过 这里先贴出来: 三种用法如下: 在 C# 中,new 关键字可用作运算符.修饰符或约 ...

  10. cpp异常详解

    1. 异常介绍 在函数在执行过程中如果碰到对错误的处理可以有两种方式, 1. 返回错误,2. 使用异常. 如果作为函数的调用者想要知道具体的错误信息, 就需要维护一套错误列表, 或者用string类型 ...