拦截器(Interceptor)是Struts 2的核心组成部分。很多功能(Feature)都是构建在拦截器基础之上的,例如文件的上传和下载、国际化、转换器和数据校验等,Struts 2利用内建的拦截器,完成了框架内的大部分操作。
在Struts 2文档中对拦截器的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可以在Action执行之前或者之后运行,也可以在一个Action执行之前阻止Action执行。同时也提供了一种可以提取Action中可重用的部分的方式
拦截器在Struts2中的示意图:
从上图可以看出,Struts 2架构的Action被一个或者多个拦截器(拦截器栈)所包围,所有的用户请求都会被拦截器所拦截,然后交给Action处理,处理结果以逻辑视图方式返回给用户。而这个调用执行流程,是由Struts 2的配置文件来实现的,后面会详细介绍。拦截器是Struts 2核心部分之一。
当用户请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(List),最后一个一个地调用列表中的拦截器
拦截器时序图如下图所示:
在Struts 2架构中,Action的调用都是通过拦截器来实现的。有的读者可能会疑惑,为什么没有明确说明拦截器,为什么可以直接调用Action?那是因为Struts 2架构如果不做显式的拦截器配置,则系统会调用默认的拦截器来调用Action,在用户看来,好像没有配置拦截器
Hello World拦截器示例.
程序要演示的是显示地让拦截器调用Action,来体会拦截器的用途。
一般情况下我们都会先写出一个Action,然后配置struts.xml文件
MyAction.java
public class MyAction extends ActionSupport {

//以下属性信息都是从前台(JSP页面获得)
  private String username;
    
  private String mymsg;
    
  private String password1;
    
  private String password2;
    
  private Date birthday;

public String execute(){
    if(username!=null&&this.getPassword1().equals(this.getPassword2())&&!this.getUsername().trim().equals("")){
        
      //输出调试信息
      System.out.println("Action信息,正在执行Action....  ");
      return SUCCESS;
    }else{
      return INPUT;
    }
  }

public String getUsername() {
    return username;
  }

public void setUsername(String username) {
    this.username = username;
  }

public String getMymsg() {
    return mymsg;
  }

public void setMymsg(String mymsg) {
    this.mymsg = mymsg;
  }

public String getPassword1() {
    return password1;
  }

public void setPassword1(String password1) {
    this.password1 = password1;
  }

public String getPassword2() {
    return password2;
  }

public void setPassword2(String password2) {
    this.password2 = password2;
  }

public Date getBirthday() {
    return birthday;
  }

public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }
    
}

自定义拦截器MyInterceptor.java
public class MyInterceptor extends AbstractInterceptor {

//拦截方法
  public String intercept(ActionInvocation invocation) throws Exception {

MyAction myA=(MyAction) invocation.getAction();
    System.out.println("拦截器信息:hello world 拦截器");
    //执行action或者下一个拦截器
    String result=invocation.invoke();
    System.out.println("拦截器信息:Action执行完毕");
    return result;
  }

}

下面我们开始配置struts.xml文件
首先我定义了一个my.xml文件
<?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.0.dtd">

<struts>

<package name="mynew" namespace="/" extends="struts-default">
        
          <interceptors>
            <interceptor name="myInterceptor" class="com.MyInterceptor">
            </interceptor>
          </interceptors>
    
    <action name="myAction" class="com.MyAction">
      <result name="success">/success.jsp</result>
      <result name="input">/index.jsp</result>
      <!-- 引用默认拦截器 -->
      <interceptor-ref name="defaultStack"></interceptor-ref>
      <!-- 引用自定义拦截器 -->
      <interceptor-ref name="myInterceptor"></interceptor-ref>
    </action>
        </package>
</struts>

这样的话就要在struts.xml引入,
<?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.0.dtd">

<struts>
        <constant name="struts.devMode" value="true" />
  <include file="my.xml"></include>
</struts>

如果读者不习惯的话完全可以写在struts.xml文件中
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    <head>
    </head>
    
    <body>
      <s:form method="post" action="myAction">    
        <s:textfield name="username" label="用户名"></s:textfield>
        <s:password name="password1" label="密码"></s:password>
        <s:password name="password2" label="确认密码"></s:password>
    <s:submit value="注册"></s:submit>
      </s:form>
    </body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <h3>注册成功</h3>
  用户名:<s:property value="username"/><p>
  密码:    <s:property value="password1"/>
</body>
</html>
后台输出结果:
拦截器信息:hello world 拦截器
Action信息,正在执行Action....    
2010-11-1 20:39:11 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: Could not find property [org.apache.catalina.jsp_file]
拦截器信息:Action执行完毕

转载于:https://blog.51cto.com/youngforwork/830077

Struts2拦截器简单示例相关推荐

  1. 获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例

    获取http请求标头 在使用Java EE开发和发展REST API的过程中,有些情况下您希望以更精细的方式(视情况)对传入的HTTP请求(特别是标头参数)进行"观察" Servl ...

  2. HTTP请求和标头参数的CDI拦截器-简单示例

    在使用Java EE开发和发展REST API的过程中,有些情况下您希望以更细粒度的方式(视情况而定)对传入的HTTP请求(特别是标头参数)进行"观察" Servlet过滤器或更具 ...

  3. dio拦截器 flutter_详解flutter之网络请求dio,请求,拦截器简单示例

    flutter一直很火的网络请求插件dio 直接上代码,写成一个类,可以直接使用 包含请求的封装,拦截器的封装 import 'package:dio/dio.dart'; import 'dart: ...

  4. struts2 拦截器_Struts2令牌拦截器示例

    struts2 拦截器 Struts 2 token interceptor can be used to handle multiple form submission problem. While ...

  5. struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作

    struts2 拦截器 Sometimes we have long running actions where user will have to wait for final result. In ...

  6. struts2 拦截器_Struts 2拦截器示例

    struts2 拦截器 Welcome to Struts 2 Interceptor Example. While working on Struts 2, most of the time you ...

  7. struts2拦截器的实现原理及源码剖析

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  8. Struts2 拦截器(Interceptor )原理和配置

    Struts2 拦截器 拦截器在概念上与servlet过滤器或JDK代理类相同.拦截器允许横切功能,把action以及框架分开实现.你可以使用拦截器实现以下操作: 在调用action之前提供预处理逻辑 ...

  9. 基于SSH2框架Struts2拦截器的登录验证实现 来自菠萝大象

    本文为菠萝大象原创,如要转载请注明出处. 通过之前的 Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解系列文章,我们已经成功将这三种框架整合到了一起, 这次大 ...

最新文章

  1. Pyhton 内置 itertools 模块chain、accumulate、compress、drop、take等函数使用
  2. java设置可信任站点_通过网页修改activex安全设置,添加信任站点,禁用弹出窗口阻止程序...
  3. AAAI2021 | 图神经网络最新进展解读
  4. EditText 长按弹出的上下文菜单
  5. java url加密解密,java URL 编码解码,该如何解决
  6. chapter 01
  7. 百度技术研发笔试题目
  8. 20190408 Java中的Double类型计算
  9. java 接口与包_java常用类包接口
  10. orm2 中文文档 4.1 hasOne(多对一关系)
  11. 区块链 预言机 Oracle是什么 例子
  12. stata 空间杜宾模型_一文读懂空间计量及stata应用(二)(附lr检验、动态空间面板杜宾/滞后模型dofile等)...
  13. WPS 连接 H2 Database
  14. 计算机毕业设计node+vue基于微信小程序的乐团团购系统的设计与实现
  15. ftp文件服务器备份,ftp文件服务器备份
  16. Android 关闭屏幕方法
  17. 线性链表实现对二进制数加1运算
  18. Anaconda3-5.2.0+PyTorch1.3.0+cuda9.2本地安装教程
  19. python课程介绍-Python简介
  20. Commvault蔡报永:点亮你的暗数据

热门文章

  1. 双因素方差分析_多因素方差分析
  2. 单片机中灯泡显示miss_单片机实例分享,如何设计八路抢答器
  3. git显示服务器所有分支,怎么拉取git服务器上面的分支到本机?
  4. 喜报!神策数据荣获“2019 银行业数字营销大赛”智能营销类金奖
  5. 技术分享 | 个性化推荐系统商业化的五大要素
  6. Spring之使用注解实例化Bean并注入属性
  7. mybatis出现 Parameter '__frch_excelModel_0' not found.
  8. 从内容云到一云多屏 云计算助力传统媒体转型
  9. linux基本知识2
  10. 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能