`
梦想家dream
  • 浏览: 63785 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

struts2从零开始(三)

 
阅读更多
   拦截器



    1、拦截器设置令牌
      1.1、页面中添加设置令牌的标签(代码如下)
          
<form action="token.action" method="post">
      <s:token></s:token>
     <input type="submit" value="令牌测试"/>
  
      </form>


      1.2、配置action时需要引用token拦截器(代码如下)
      
<action name="token" class="cn.zhuojingxinxi.web.TokenAction">
	             <interceptor-ref name="token"></interceptor-ref>
	             <result name="success">/success.jsp</result>
	             <result name="invalid.token">/error.jsp</result>
	         </action>

      需要注意的是:需要配置的是当令牌失效的时候所要跳转的页面,其中名称必须是--invalid.token
    
   2、国际化
     2.1、在src下新建三个资源文件
    

    struts.properties中的内容是:struts.custom.i18n.resources=mymessage
    mymessage_zh_CN.properties中的内容是:messages.invalid.token=\u8868\u5355\u91CD\u590D\u63D0\u4EA4\uFF0C\u8BF7\u68C0\u67E5
mymessage_en_US.properties中的内容是:messages.invalid.token=The form has already been processed or no token was supplied, please try again.

   注意:如果配置了拦截器请必须加上默认的
   <interceptor-ref name="defaultStack"></interceptor-ref>

   3、自定义拦截器
    3.1、可是实现Interceptor接口(代码如下)
package cn.zhuojingxinxi.util;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class FirstInterceptor implements Interceptor {

	public void destroy() {
	System.out.println("销毁了");
		
	}

	public void init() {
		System.out.println("初始化");
		
	}

	public String intercept(ActionInvocation arg0) throws Exception {
		
		System.out.println("自定义的拦截器 begin");
		String str=  arg0.invoke();
		System.out.println("自定义的拦截器 end");
		return null;
	}

}

  3.2、继承AbstractInterceptor(代码如下)
  
package cn.zhuojingxinxi.util;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class SecondInterceptor extends AbstractInterceptor {

	public void destroy() {
	System.out.println("销毁了");
		
	}

	public void init() {
		System.out.println("初始化");
		
	}

	public String intercept(ActionInvocation arg0) throws Exception {
		
		System.out.println("自定义的拦截器2 begin");
		String str=  arg0.invoke();
		System.out.println("自定义的拦截器2 end");
		return null;
	}

}

     3.3、在sruts.xml中申明拦截器(代码如下)
   
 <interceptors>
	          <interceptor name="first" class="cn.zhuojingxinxi.util.FirstInterceptor"></interceptor>
	           <interceptor name="second" class="cn.zhuojingxinxi.util.SecondInterceptor"></interceptor>
	       </interceptors>

    3.4、action中调用(代码如下)
    
<action name="my" class="cn.zhuojingxinxi.web.MyAction">
	             <interceptor-ref name="first"></interceptor-ref>
	             <interceptor-ref name="second"></interceptor-ref>
	             <interceptor-ref name="defaultStack"></interceptor-ref>
	             <result name="success">/success.jsp</result>
	        
	         </action>

    以下拦截器是针对action。以下这种拦截器是针对action中的方法拦截器:

    3.5、实现MethodFilterInterceptor接口(代码如下)
   
package cn.zhuojingxinxi.util;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class ThirdInterceptor extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation arg0) throws Exception {
		
		System.out.println("自定义的拦截器3 begin");
		String str=  arg0.invoke();
		System.out.println("自定义的拦截器3 end");
		return str;
	}

	

}


   在action中的配置(代码如下)
 
<action name="my" class="cn.zhuojingxinxi.web.MyAction">
	             <interceptor-ref name="first"></interceptor-ref>
	             <interceptor-ref name="second"></interceptor-ref>
	             <interceptor-ref name="third">
	                <param name="includeMethods">save,delete</param>
	             </interceptor-ref>
	             <interceptor-ref name="defaultStack"></interceptor-ref>
	             <result name="success">/success.jsp</result>
	        
	         </action>

 
    <param name="includeMethods">save,delete</param>这句代码的意思是:配置的是白名单,只有其中配置的方法才会背自定义的拦截器所拦截

  3.6、当我们自定义了很多拦截器时,而我们有时候需要这些拦截器同时使用,就可以将这下拦截器配置成栈的形式(代码如下)
   
<interceptor-stack name="myInterceptorStack">
	             <interceptor-ref name="first"></interceptor-ref>
	             <interceptor-ref name="second"></interceptor-ref>
	             <interceptor-ref name="third"></interceptor-ref>
	             <interceptor-ref name="defaultStack"></interceptor-ref>
	           </interceptor-stack>

  值得注意的是:拦截器是有顺序的
                拦截器的返回值与跳转的页面无关
                拦截器的invoke表示往后传递调用,invokeActionOnly则会跳过后续拦截器直接调用action


源码下载请点这里:


   
  • 大小: 14.8 KB
分享到:
评论

相关推荐

    struts2从零开始(一)

    NULL 博文链接:https://1136051009.iteye.com/blog/1768000

    struts2从零开始(六)

    Struts2从零开始系列教程旨在帮助初学者深入理解并掌握Struts2框架的应用与开发。在第六部分中,我们将探讨Struts2的核心概念、工作原理以及如何在实际项目中运用它。Struts2是一个流行的Java Web应用框架,用于构建...

    struts2从零开始(七)

    本教程将带你从零开始学习Struts2,通过第七个部分的内容,我们将深入理解其核心概念和实际应用。 首先,让我们探讨Struts2的基础知识。Struts2是Apache软件基金会的产品,它是基于Struts1的升级版,引入了更多现代...

    struts2从零开始(四)

    本教程将从零开始,帮助你深入理解并掌握Struts2的核心概念和实践技巧。 首先,我们要理解Struts2的核心架构。Struts2通过拦截器(Interceptor)机制实现了请求处理流程的控制,它允许开发者插入自定义的逻辑来扩展...

    struts2从零开始(二)

    在“Struts2从零开始(二)”这个主题中,我们将会深入探讨Struts2的核心概念和实践操作,以帮助初学者更好地理解和掌握这个框架。 首先,Struts2的核心在于它的Action类,它是业务逻辑处理的主要组件。Action类...

    struts2从零开始(五)

    本篇文章将从零开始,逐步介绍如何使用Struts2进行开发,带你走进Struts2的世界。 首先,让我们理解Struts2的核心概念。Struts2是一个轻量级、可扩展的MVC框架,它继承了Struts1的优点并解决了其不足,如性能问题和...

    Struts 从零开始

    总之,"Struts 从零开始"的学习资源为你提供了一个良好的起点,通过实践这些示例项目,你可以深入理解 Struts 如何协调 MVC 三者之间的关系,以及如何在实际应用中灵活运用这一框架。记得在学习过程中结合官方文档和...

    简述STRUTS2_Convention零配置

    从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需手动配置。 Convention插件的工作原理是基于“约定优于配置”(Convention over Configuration)的原则,它会自动识别...

    struts2零配置个人整理文档

    ### Struts2零配置个人整理文档 #### 一、Convention插件详解 ##### 1. 设置结果页面路径 - **背景介绍**:Struts2框架提供了便捷的方式来处理Web请求,并返回响应视图。为了简化配置过程,Struts2提供了一个名为...

    如何使用struts2的零配置插件convention

    从Struts2.1版本开始,`Codebehind`插件被`Convetion`插件取代,以提供更全面的零配置支持。`Convetion`插件通过自动扫描和推理应用程序中的类和方法来配置Action和结果映射,不需要开发者显式地在`struts.xml`或...

    struts2资源包

    使用这个“struts2资源包”,开发者可以快速搭建一个基于Struts2的Web应用,无需从零开始配置所有的依赖。通过导入这些库,你可以实现动作类的定义、拦截器的设置、结果页面的跳转、表单验证、国际化、文件上传下载...

    从零开始创建基于struts1.2 + Hibernate3.0的Web工程

    2. 例子工程说明..........................................................3 3. 建立工程..............................................................4 3.1. 创建新的Web Project ..........................

    使用Struts2和jQuery EasyUI实现简单CRUD系统

    在本文中,我们将探讨如何使用Struts2和jQuery EasyUI框架创建一个简单的CRUD(创建、读取、更新、删除)系统。首先,我们需要理解这两个技术的基础概念。 Struts2是一个基于MVC(Model-View-Controller)架构的...

    struts2零配置入门代码

    在“struts2零配置入门代码”这个主题中,我们将深入探讨如何在不编写大量XML配置文件的情况下,启动并运行一个基本的Struts2应用程序。 Struts2的核心在于它的Action类,它是业务逻辑处理的主要组件。在“零配置”...

    Struts2权威指南完整版

    12. **实战案例**:通过实际项目示例,展示如何从零开始构建一个完整的Struts2应用,涵盖需求分析、设计、编码和测试的全过程。 通过阅读《Struts2权威指南》,开发者不仅可以掌握Struts2框架的使用,还能深入理解...

    struts2参考文档(word版)

    最后,文档可能包含了一些实战示例,引导读者从零开始搭建一个完整的Struts2项目,通过实际操作加深对理论知识的理解。 总的来说,这份Struts2参考文档全面覆盖了Struts2框架的主要概念和技术,对于想要学习或已经...

    轻松入门之struts2 3.0版

    10. **实战项目**:通过一个实际的小型项目,展示如何从零开始搭建一个基于Struts2 3.0的应用,涵盖了上述所有知识点的综合运用。 通过阅读“轻松入门之Struts2 3.0版”,开发者不仅能掌握Struts2的基本用法,还能...

    ajax与Struts2交互实例

    使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的ajax与Struts2的交互开始。

Global site tag (gtag.js) - Google Analytics