我们可以看到Struts2框架的工作流程是:用户请求 -> 拦截器链 -> Action处理 -> 返回结果 -> 视图呈现

Struts2框架的执行流程主要包括以下几个步骤:

  1. 用户请求:客户端初始化一个指向Servlet容器(例如Tomcat)的请求。
  2. 拦截器链:请求经过一系列的过滤器(Filter),这些过滤器可以对请求进行预处理,例如权限检查、数据验证等。
  3. Action处理:Struts2根据配置文件中的映射关系,找到对应的Action类来处理请求。Action类中封装了业务逻辑和数据处理。
  4. 返回结果:Action处理完成后,会返回一个Result对象,这个对象指示了下一步应该做什么,比如转发到另一个Action或者渲染一个视图。
  5. 视图呈现:最后,Struts2将Result对象与一个视图相关联,并将视图呈现给用户。

通过以上步骤,我们可以看到Struts2框架的工作流程是:用户请求 -> 拦截器链 -> Action处理 -> 返回结果 -> 视图呈现。

Struts2框架中的拦截器链用于在Action执行前后进行特定功能的处理

以下是一些关于Struts2拦截器链的具体作用:

  1. 预处理请求:在Action方法执行之前,可以对请求数据进行校验、登录验证等预处理操作。
  2. 后处理响应:在Action方法执行之后,可以对响应结果进行处理,如添加特定的头部信息或对输出的数据进行格式化。
  3. 异常处理:如果Action中发生异常,拦截器可以捕获这些异常并进行相应的处理,比如返回用户友好的错误页面。
  4. 权限控制:通过拦截器可以实现权限控制,确保只有具备相应权限的用户才能访问某些资源。
  5. 日志记录:利用拦截器可以在每个请求被处理前后记录日志,便于跟踪和调试。
  6. 性能监控:可以通过拦截器来监控请求的处理时间,帮助识别性能瓶颈。
  7. 类型转换错误处理:特定的拦截器如conversation可以处理类型转换错误,将错误信息从ActionContext中取出并转换为Action错误。

此外,Struts2还提供了一些内建的拦截器,如aliasi18nservletConfig等,它们各自负责不同的功能,可以根据需要进行配置和使用。

综上所述,拦截器链是Struts2框架中一个非常强大的特性,它允许开发者以插件的形式增强框架的功能,使得代码更加模块化和易于维护。
在Struts2中,拦截器是一种可以在Action的执行过程中拦截请求并对其进行处理的组件。其作用就像是一个过滤器,可以拦截请求并处理请求,例如检查用户是否登录、记录日志等操作。在Struts2中,有很多内置的拦截器,同时也支持用户自定义拦截器来实现特定的需求。

自定义Struts2拦截器需要实现Interceptor接口,Interceptor接口提供了三个方法:init()、intercept()和destroy()。其中init()方法在拦截器被初始化时被调用,一般用于一些初始化的工作;intercept()方法是最重要的方法,它用于拦截请求并进行处理;destroy()方法在拦截器被销毁时被调用,一般用于一些清理工作。

在Struts2中,可以通过配置文件(例如struts.xml)来配置拦截器,具体配置方式可参考Struts2官方文档。同时,也可以通过继承AbstractInterceptor类来实现自定义的拦截器。下面是一个实现拦截器的例子:

from com.opensymphony.xwork2 import ActionInvocation, interceptor

class MyInterceptor(interceptor.AbstractInterceptor):
    def intercept(invocation: ActionInvocation):
        # Do something before action is executed
        result = invocation.invoke()
        # Do something after action is executed
        return result

在Struts 2框架中,内置了许多拦截器用于处理常见的需求和问题,例如:参数校验,异常处理,国际化等等。以下是Struts2中内置的一些拦截器:

  1. params:对Action的参数进行校验,保证参数不为空或者合法。
  2. validation:提供了基于XML的验证框架,可以对Action中的属性进行验证。
  3. workflow:提供一种流程操作方式,可以通过配置文件控制Action的执行顺序。
  4. exception:用于捕获Action抛出的异常,并进行处理。
  5. i18n:用于国际化处理,可以根据用户的语言环境选择不同的资源文件。
  6. prepare:用于在Action执行前准备数据,也可以用于为Action注入依赖对象。
  7. chain:可以组合多个拦截器,形成一个拦截器链,方便集中处理一些问题。

以上只是Struts2框架中内置的部分拦截器,开发者还可以根据自己的需求编写自定义的拦截器。

在Struts2中配置自定义拦截器可以通过以下的步骤实现:

  1. 创建一个实现了Interceptor接口的Java类,对其进行功能定制。
  2. 在struts.xml中定义拦截器并配置其属性,或者继承自定义的拦截器栈。
    下面是一个例子:
    引用:用于配置自定义拦截器栈,一个拦截器栈由多个拦截器构成,也可以包含其他的拦截器栈
<interceptors>
  <interceptor name="myInterceptor" class="com.example.MyInterceptor"/>
  <interceptor-stack name="myInterceptorStack">
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="myInterceptor"/>
  </interceptor-stack>
</interceptors>

引用:继承MethodFilterInterceptor,功能定制拦截器拦截方法。

public class MyInterceptor3 extends MethodFilterInterceptor {
  @Override
  protected String doIntercept(ActionInvocation invocation) throws Exception {
    //前处理
    System.out.println("MyInterceptor前处理");
    //如何进行放行
    invocation.invoke();
    //后处理
    System.out.println("MyInterceptor后处理");
    return null;
  }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值