📜  Struts 2-建筑(1)

📅  最后修改于: 2023-12-03 14:47:44.293000             🧑  作者: Mango

Struts 2 - 建筑

介绍

Struts 2是一个基于MVC设计模式的Web应用程序框架,具有容易学习、易于开发、易于维护和良好扩展性的特点。Struts 2框架的核心是Interceptors拦截器,这个拦截器可以很好的协调各个组件之间的关系,同时提供了很多扩展点供开发人员进行自定义处理。

架构

Struts 2的整体架构如下:

Struts2 Architecture

  • Request - 客户端发送的请求
  • Filter - 过滤器负责从请求中获取相关的参数并且创建ActionInvocation
  • ActionInvocation - 根据请求参数找到合适的Action类,并且执行对应的方法
  • Action - 包含应用程序的业务逻辑
  • Result - 显示Action执行的结果
  • View - 呈现最终结果给用户
核心组件
Actions

Action是Struts2中的核心组件,是处理Web请求的中心。每个Action类通常会处理一个特定的请求,它可以是一个普通Java类或者是Struts2中提供的Action支持的类。

Action类需要实现com.opensymphony.xwork2.Action接口,并且需要实现其execute()方法。Action的方法可以接收请求发过来的参数,方法名可以随意改变,但是接收参数的名称需要与请求中参数的名称相同,否则无法获取参数。

package com.example.action;

import com.opensymphony.xwork2.Action;

public class ExampleAction implements Action {
    private String message;

    public String execute() throws Exception {
        message = "Hello World!";
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }
}
Interceptors

拦截器是Struts2中处理请求的关键组件,每个请求在被处理前都会经历多个拦截器的处理。拦截器提供了开发人员自定义处理请求、响应和处理异常的机制。Struts2中提供了多个标准的拦截器,包括:

  • AuthenticationInterceptor - 身份验证拦截器
  • ExceptionMappingInterceptor - 异常处理拦截器
  • FileUploadInterceptor - 文件上传拦截器
  • ParamsInterceptor - 参数处理拦截器
  • PrepareInterceptor - Action预处理拦截器
  • ValidationInterceptor - 数据校验拦截器
  • 等等
<package name="example" extends="struts-default">
    <interceptors>
        <interceptor name="authInterceptor" class="com.example.Interceptor.AuthInterceptor"/>
        <interceptor name="logInterceptor" class="com.example.Interceptor.LogInterceptor"/>
        <interceptor-stack name="example.interceptorStack">
            <interceptor-ref name="authInterceptor" />
            <interceptor-ref name="logInterceptor" />
            <interceptor-ref name="paramsPrepareParamsStack"/>
        </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="example.interceptorStack" />
    <action name="example" class="com.example.action.ExampleAction">
        <result name="success">/example.jsp</result>
    </action>
</package>
Result

Result是处理Action返回结果的核心组件。一个Action的处理结果可以是HTML、XML或JSON等格式,Result负责将结果呈现给用户。Struts2中提供了多种标准的Result,包括:

  • DispatcherResult - 请求分发结果类型
  • FreeMarkerResult - FreeMarker结果类型
  • HttpHeaderResult - HTTP头结果类型
  • RedirectAction - 重定向结果类型
  • VelocityResult - Velocity结果类型
  • 等等
<result name="success" type="dispatcher">/example.jsp</result>
<result name="input" type="redirectAction">example.action?error=true</result>
总结

Struts 2是一个功能强大而灵活的MVC框架,它提供了很多标准组件,并且支持扩展,开发人员可以利用这些组件和扩展点快速开发Web应用。在学习Struts 2时,需要理解它的整体架构和核心组件,并且需要把握好每个组件的作用和用法。