Struts2快速基础入门实战指南

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Struts2是一个基于MVC架构的Java Web应用程序框架,它简化了开发过程并提供了对控制流的更好控制。本文是一个初学者友好型的快速入门指南,将引导读者了解Struts2的核心概念,包括Action类、配置文件、MVC模式、拦截器、ValueStack、OGNL表达式语言以及结果类型。教程将一步步带领读者构建一个简单的Struts2项目,从环境搭建到实际操作演练,涵盖从创建Action到添加拦截器的全过程,让读者在实践中快速掌握Struts2的使用。 Struts2 最基础快速入门

1. Struts2框架概述

1.1 Struts2框架简介

Struts2是一个开源的MVC(Model-View-Controller)框架,广泛应用于Web应用程序的开发。作为一个成熟的解决方案,它利用了拦截器的动态拦截方法调用,将业务逻辑和用户界面分离,从而简化了复杂的Web层开发。Struts2框架的特点包括高度的可扩展性、丰富的拦截器库和对多视图技术的支持,如JSP、Freemarker、Velocity等。

1.2 Struts2框架的发展

Struts2框架从早期的Struts 1.x版本发展而来,通过引入拦截器机制和WebWork的核心特性,提供了更为灵活和强大的Web开发功能。其架构设计允许开发者通过配置文件和注解来定制应用的行为,极大的提高了开发效率。此外,Struts2支持多种数据绑定和类型转换,使得处理表单和业务逻辑之间的数据交换变得简单。

1.3 Struts2框架的主要组成部分

Struts2框架主要由以下几个核心组件构成:

  • Action类 :用于处理用户请求并返回结果的类。
  • ValueStack (值栈):用于在Model、View和Controller之间传递数据的对象。
  • OGNL (Object-Graph Navigation Language):一种表达式语言,用于访问对象图,简化数据访问操作。
  • 拦截器 :一种动态地拦截Action调用的机制,用于执行特定的预处理和后处理任务。

通过对Struts2框架的概览和组成部分的了解,我们将能够进一步深入探讨如何实现Action类,配置核心文件,以及如何在Web应用程序中应用Struts2的高级特性。接下来的章节将逐步引导我们深入了解Struts2框架的内部工作原理及其在实际项目中的应用。

2. Action类作用与实现

2.1 Action类的作用

2.1.1 Action类的基本概念

Action类是Struts2框架中非常核心的一个组件,它是实现MVC模式中控制器(Controller)功能的关键。简而言之,Action类负责接收来自客户端的请求,并根据业务逻辑处理数据,最后返回一个结果(result)给用户界面。Action类相当于一个分发器,它根据不同的动作名称(action name)将用户的请求分发到不同的处理方法中。

2.1.2 Action类在MVC模式中的角色

在传统的MVC模式中,Action类扮演了"Controller"的角色。它根据用户在View层(如JSP页面)中的操作(如表单提交、链接点击等),调用相应的Model层(业务逻辑层)的代码进行处理,然后将处理结果返回给View层进行展示。因此,Action类起到了承上启下的作用,是控制请求流程和数据流向的关键组件。

2.2 实现Action类

2.2.1 创建Action类的步骤

要创建一个Action类,通常需要遵循以下步骤:

  1. 定义Action类 :首先创建一个类并继承自 com.opensymphony.xwork2.ActionSupport ,这是Struts2提供的一个方便使用的基类。
  2. 编写方法 :在Action类中编写业务逻辑处理的方法,并使用 @Action 注解(或在struts.xml中配置)来指定对应的动作名称。

  3. 配置struts.xml :在struts.xml配置文件中注册Action类,配置动作名称和返回结果等信息。

  4. 实现返回结果 :在Action类中实现 execute() 方法或使用 @Action 注解指定的方法,返回字符串来标识结果。

下面是一个简单的Action类示例:

public class SampleAction extends ActionSupport {
    private String name;

    // Getter and setter methods for 'name'
    @Action(value = "/sampleAction", results = {
        @Result(name = "success", location = "/pages/sample.jsp"),
        @Result(name = "input", location = "/pages/error.jsp")
    })
    public String execute() {
        // Action的业务逻辑处理
        if ("valid".equals(name)) {
            return SUCCESS;
        } else {
            return INPUT;
        }
    }
}
2.2.2 Action类的生命周期

Action类的生命周期主要涉及以下几个步骤:

  1. 实例化 :Struts2框架会通过默认的构造函数或者Action的实现类中提供的构造函数来创建Action对象的实例。

  2. 设置属性值 :通过拦截器(如 ParamNameInterceptor ),将从HTTP请求中提取的参数设置到Action对象的属性中。

  3. 调用方法 :框架会调用Action对象中对应HTTP请求的动作方法(例如 execute() 方法),并根据返回的字符串决定接下来的操作。

  4. 结果展示 :根据动作方法返回的字符串,框架会找到对应的result定义,并将用户重定向到指定的视图资源(通常是JSP页面)。

  5. 销毁实例 :使用完毕后,框架会销毁Action对象实例。

在这一生命周期中,Action类的实例只会创建一次,除非你设置了不同的拦截器来改变默认行为,例如在每次请求后销毁Action实例,或者每次请求都重新创建一个新的实例。

下面是一个Struts2的配置文件中关于Action生命周期配置的片段:

<action name="sampleAction" class="com.example.SampleAction">
    <interceptor-ref name="defaultStack"/>
    <result name="success" type="dispatcher">
        /pages/sample.jsp
    </result>
    <result name="input">/pages/error.jsp</result>
</action>

在这段配置中,我们指定了 SampleAction 类用于处理名为 sampleAction 的请求。它使用默认的拦截器栈 defaultStack 进行请求处理。根据 execute 方法返回的结果值,请求将被转发到不同的视图资源。

在实现Action类的过程中,理解其生命周期是非常关键的,它可以帮助开发者更好地控制请求的处理过程,以及如何将结果返回给用户。

3. 配置文件与项目设置

3.1 Struts2的核心配置文件

Struts2框架提供了灵活的配置机制,核心配置文件struts.xml是整个Struts2应用的配置中心。开发者通过配置这个文件来定义Action映射、拦截器栈和结果类型等关键元素,从而控制应用的行为。本节将介绍struts.xml的作用与结构,以及如何进行配置文件的编辑与调试。

3.1.1 struts.xml文件的作用与结构

Struts2框架的struts.xml文件位于项目的WEB-INF/classes目录下,是Struts2框架默认寻找的配置文件。当应用启动时,Struts2会自动加载并解析该文件,将其与框架整合,应用的各类配置信息也就生效了。

Struts2的配置文件struts.xml的基本结构如下:

  • package :这是配置文件中最重要的元素之一,用于组织Action类和拦截器栈。
  • action :它定义了访问的URL和对应的Java类之间的映射关系。
  • result :它定义了当Action执行完毕后跳转到的结果页面。
  • interceptor-ref :引用定义好的拦截器,可以自定义拦截器或使用Struts2提供的拦截器。

配置文件的核心结构示例如下:

<struts>
    <package name="default" extends="struts-default">
        <action name="example" class="com.example.ExampleAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
        <interceptor-ref name="defaultStack"/>
        <!-- 其他配置 -->
    </package>
    <!-- 其他package配置 -->
</struts>

在这个结构中,我们定义了一个名为"example"的Action,用户通过访问"example"时会调用"com.example.ExampleAction"类的实例。对于不同的执行结果,我们指定了跳转到不同的页面(成功跳转到"success.jsp",出错则跳转到"error.jsp")。同时,我们还引用了默认的拦截器栈"defaultStack"。

3.1.2 配置文件的编辑与调试

编辑struts.xml配置文件是一个细致而重要的工作。在配置文件编辑过程中,常常需要注意以下几点:

  • 确保语法正确。XML文件对语法要求严格,任何语法错误都可能导致框架无法正确加载配置。
  • 使用适当的继承。通过继承"struts-default"包,可以复用Struts2提供的默认行为。
  • 逻辑清晰的配置。合理组织配置结构,易于其他开发者阅读和维护。
  • 精心设计Action的命名,以利于维护和扩展。
  • 使用属性文件管理国际化信息、配置信息和常量,提升项目的可维护性。

调试方面,首先确保Web容器(如Tomcat)正确加载了struts.xml文件。通过查看日志文件和启动时控制台的输出信息,可以发现配置文件中是否存在错误。可以利用日志级别来控制日志输出的详细程度,通过查看详细的错误信息来定位问题。在开发阶段,还可以使用Struts2的开发模式,这样框架会自动检测文件变化并重新加载配置,便于开发者快速定位问题。

3.2 项目设置与环境配置

3.2.1 项目的初始化与基本设置

Struts2项目的初始化通常包括以下几个步骤:

  1. 创建项目结构 :在IDE中创建一个Web项目,添加必要的目录结构,比如 src 目录用于存放Java源代码, WEB-INF 目录用于存放web.xml文件和lib目录等。
  2. 引入Struts2依赖 :将Struts2的jar包添加到项目的类路径中,可以通过Maven或直接添加jar到lib目录的方式完成。
  3. 配置web.xml :在web.xml中配置Struts2的监听器 StrutsPrepareAndExecuteFilter ,该监听器负责初始化Struts2框架并处理请求。
  4. 创建struts.xml文件 :在WEB-INF/classes目录下创建Struts2的核心配置文件struts.xml,并进行基本配置。

基本设置完成后,就可以着手进行环境配置了。

3.2.2 环境变量的配置与管理

环境变量配置的目的是为了简化开发过程,让开发者能够更高效地工作。对于Struts2项目,常见的环境变量配置包括:

  • JAVA_HOME :指向JDK安装目录,确保开发者可以使用Java命令。
  • PATH :添加JDK和JRE的bin目录,使得在命令行中可以直接运行java和javac命令。
  • CLASSPATH :包含Struts2所需的库文件,如struts2-core.jar。

在IDE(比如IntelliJ IDEA或Eclipse)中,通常需要配置项目级别的环境变量,如:

  • Project SDK :选择项目的运行JDK版本。
  • Project language level :设置Java版本,以支持最新的语法特性。
  • Library :添加Struts2框架的库文件到项目依赖中。

管理环境变量不仅有助于项目的构建和运行,还能提高开发效率。例如,配置好环境变量后,你可以直接在命令行中运行 mvn package 命令打包项目,而无需进入项目目录。

接下来,我们将深入探讨Struts2中的Model-View-Controller(MVC)模式以及如何在实际应用中使用拦截器,这些将为理解Struts2框架提供更丰富的视角。

4. Model-View-Controller(MVC)模式

4.1 MVC模式简介

4.1.1 MVC模式的定义与组成

Model-View-Controller(MVC)模式是一种广泛使用的软件架构模式,它将应用程序分为三个主要的组件:模型(Model)、视图(View)和控制器(Controller)。这种分离的关注点方法可以降低模块间的耦合度,提高代码的可维护性和可扩展性。

  • 模型(Model) :负责封装数据和与这些数据相关的操作,它是应用程序的核心部分。模型接受从控制器发来的指令,并执行相应的业务逻辑,然后将数据存储起来或检索出来供视图使用。
  • 视图(View) :负责展示数据(模型),视图是用户看到并与之交互的界面。在Web应用中,视图通常是一个JSP或HTML文件,它描述了信息的布局以及如何显示给用户。
  • 控制器(Controller) :作为模型和视图之间的中介者,控制器处理输入(通常是用户的交互),并将其转换成模型的一个或多个操作,然后选择视图来显示模型的更新。

4.1.2 Struts2中的MVC实现机制

Struts2框架是基于MVC模式设计的,其核心功能与MVC模式紧密结合。在Struts2中,每个动作(Action)都可以看作是控制器的一部分。当一个HTTP请求到达时,Struts2框架负责将请求映射到对应的Action类。

  • 控制器的实现 :Struts2使用Action类来实现控制器部分。Action类根据用户的输入执行相应的业务逻辑,并将结果返回给框架。
  • 模型的构建与管理 :在Struts2中,模型通常是JavaBean,它包含数据和数据访问逻辑,可以直接与数据库交互。
  • 视图的展现 :通过JSP或其他模板技术,视图负责将模型的数据渲染到HTML页面上,为用户提供可读的信息。

4.2 在Struts2中应用MVC模式

4.2.1 Model的构建与管理

Model部分是任何Web应用的基石,包括数据访问对象(DAOs)、数据传输对象(DTOs)、业务逻辑对象(BOs)等。

  • 数据访问对象(DAO) :DAO负责与数据库进行交互,执行CRUD(创建、读取、更新、删除)操作。DAO使用JDBC、JPA、Hibernate或MyBatis等技术与数据库通信。
  • 数据传输对象(DTO) :DTO用于封装通过网络传输的数据。DTO简化了数据结构,确保数据传输时的安全性和简洁性。
  • 业务逻辑对象(BO) :BO封装了业务逻辑。在Struts2中,Action类就扮演BO的角色,它接收用户输入,调用DAO来处理数据,然后根据结果返回适当的响应。

4.2.2 View层的展示与控制

视图层在Struts2框架中由JSP页面或模板文件负责,它们通常包含HTML和Struts2标签。

  • 使用Struts2标签库 :Struts2提供了一套丰富的标签库,用于创建用户界面,例如表单、数据列表和消息显示。
  • 数据绑定与展示 :JSP视图层可以利用ValueStack和OGNL表达式语言来展示模型数据。

4.2.3 Controller层的流程控制

控制器层是MVC中最重要的组件之一,负责接收用户输入并调用相应的模型来处理数据,最后选择视图进行展示。

  • Action映射 :Struts2使用struts.xml文件来定义动作映射。这些映射告诉框架哪个请求对应哪个Action。
  • 数据验证与处理 :在Struts2中,可以在Action中实现数据验证逻辑,也可以在XML配置文件中配置验证规则。
  • 结果类型 :每个Action返回的结果类型决定了哪个视图将被渲染或哪个动作将被转发。Struts2支持多种结果类型,如 dispatcher , redirect , stream 等。
<action name="studentForm" class="StudentAction">
    <result name="success">/studentForm.jsp</result>
    <result name="error">/error.jsp</result>
</action>

以上是MVC模式在Struts2框架中的应用介绍。理解MVC模式的各个组成部分及其实现在Struts2中的实践,对于构建清晰、可维护的Web应用程序至关重要。

5. 拦截器的使用与配置

5.1 拦截器的概念与作用

5.1.1 拦截器的基本功能与优势

拦截器(Interceptor)是Struts2框架中一个强大的特性,它允许开发者在一个请求到达Action之前或者响应返回给用户之前,对请求进行拦截和预处理。拦截器可以看作是一个过滤器链,它们按照定义的顺序执行,可以实现安全检查、日志记录、数据校验等横切关注点(Cross-cutting Concerns)。

拦截器的基本功能包括:

  • 权限检查 :在用户请求进入Action之前检查用户的权限,如登录验证、访问权限等。
  • 日志记录 :记录请求的详细信息,帮助分析系统运行情况。
  • 数据校验 :在Action执行之前对数据进行校验,避免无效数据进入业务逻辑。
  • 性能监控 :监控请求处理时间,对性能瓶颈进行优化。

使用拦截器的优势如下:

  • 代码复用 :拦截器可以集中处理共通逻辑,减少代码重复。
  • 解耦合 :将业务逻辑与非功能性的横切关注点分离,提高代码的可维护性。
  • 灵活性 :拦截器的链式结构允许灵活地添加、移除或者替换拦截器,而不影响其他部分。

5.1.2 如何在Struts2中创建拦截器

在Struts2中创建拦截器主要分为三个步骤:定义拦截器类、注册拦截器以及配置拦截器的拦截规则。

  1. 定义拦截器类 :首先需要创建一个实现了 Interceptor 接口或者继承 AbstractInterceptor 类的拦截器类。该类中的 intercept 方法是拦截请求的核心。
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class MyInterceptor implements Interceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // 在这里可以添加拦截请求的代码逻辑
        return invocation.invoke(); // 继续执行下一个拦截器或者Action
    }
}
  1. 注册拦截器 :在Struts2的配置文件 struts.xml 中注册自定义的拦截器。
<interceptors>
    <interceptor name="myInterceptor" class="com.example.MyInterceptor"/>
    <interceptor-stack name="myStack">
        <interceptor-ref name="defaultStack"/>
        <interceptor-ref name="myInterceptor"/>
    </interceptor-stack>
</interceptors>
  1. 配置拦截规则 :将拦截器应用到特定的Action或者全局范围内。
<action name="someAction" class="com.example.SomeAction">
    <interceptor-ref name="myStack"/>
    <!-- 其他配置 -->
</action>

5.2 拦截器的配置与应用

5.2.1 拦截器的配置方法

拦截器的配置方法取决于拦截器需要作用的范围。可以配置为全局拦截器,也可以只作用于特定的Action。

  • 全局拦截器配置 :在 struts.xml 中配置全局拦截器后,该拦截器会拦截所有Action请求。
<package name="default" extends="struts-default" namespace="/">
    <interceptors>
        <interceptor name="globalInterceptor" class="com.example.GlobalInterceptor"/>
        <interceptor-stack name="globalStack">
            <interceptor-ref name="globalInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
        <default-interceptor-ref name="globalStack"/>
    </interceptors>
</package>
  • 特定Action的拦截器配置 :如果只希望拦截器作用于特定的Action,可以在该Action的配置中指定。
<action name="someAction" class="com.example.SomeAction">
    <interceptor-ref name="myInterceptor"/>
    <!-- 其他配置 -->
</action>

5.2.2 拦截器在项目中的实际应用

在实际项目中,拦截器可以应用于多种场景,以下是一些典型的应用示例:

  • 权限验证 :拦截器可以检查用户是否已登录,并根据用户的权限决定是否允许访问Action。
public String intercept(ActionInvocation invocation) throws Exception {
    ActionContext context = invocation.getInvocationContext();
    String userId = (String) context.getSession().get("userId");
    if (userId == null) {
        return "login"; // 未登录,跳转至登录页面
    }
    return invocation.invoke(); // 已登录,继续执行
}
  • 请求日志记录 :拦截器可以在日志文件中记录请求的详细信息,便于后续分析问题。
public String intercept(ActionInvocation invocation) throws Exception {
    long startTime = System.currentTimeMillis();
    String result = invocation.invoke();
    long endTime = System.currentTimeMillis();
    ActionContext context = invocation.getInvocationContext();
    String actionName = context.getName();
    // 记录日志
    System.out.println("Action " + actionName + " took " + (endTime - startTime) + "ms");
    return result;
}
  • 数据校验 :拦截器可以在数据到达Action之前进行校验,确保数据的有效性和完整性。
public String intercept(ActionInvocation invocation) throws Exception {
    // 假设有一个validate方法用于校验数据
    boolean isValid = validate(invocation);
    if (!isValid) {
        return "error"; // 数据校验不通过,返回错误信息
    }
    return invocation.invoke(); // 校验通过,继续执行
}

在配置和使用拦截器时,需要根据实际的业务需求和系统设计来决定拦截器的种类和数量。过多的拦截器可能会导致系统的性能下降,因此应该合理安排拦截器的使用,并在必要时进行性能优化。

6. ValueStack的作用与应用

6.1 ValueStack原理介绍

6.1.1 ValueStack的定义与功能

ValueStack,或称为值栈,是Struts2框架中一个核心概念。它是用于存储和管理Action对象及相关数据的内部数据结构,提供了一种机制来支持数据的传递和页面中数据的展示。值栈本质上是一个对象栈,它在Action和视图层之间起到中介的作用,允许开发者在视图层直接访问Action中的数据。

当一个请求发送到Struts2框架时,框架会创建一个Action实例,并将该实例与一个值栈实例关联起来。该值栈在请求处理的整个生命周期内都存在,并随着Action的流程而变化。Action中的属性可以直接通过值栈来访问,而无需通过Action属性直接获取,这使得JSP或其他视图技术可以轻松地展示这些数据。

6.1.2 ValueStack与OGNL的关联

ValueStack与OGNL(Object-Graph Navigation Language)紧密相关,后者是一种功能强大的表达式语言,用于获取和设置Java对象的属性。通过OGNL,Struts2的视图层可以方便地访问和操作Action对象中的数据。OGNL表达式在Struts2中广泛应用于标签库中,用以动态绑定数据到视图层。

OGNL通过ValueStack来访问Action对象,它首先将表达式转换为栈操作,然后通过ValueStack的栈顶元素(通常是Action实例)来访问和操作对象图中的数据。OGNL还可以执行其他高级功能,如调用方法、访问静态变量等。

6.2 ValueStack在开发中的运用

6.2.1 ValueStack的数据传递

ValueStack在数据传递方面起着至关重要的作用。在MVC模式中,ValueStack充当数据载体,使得数据能够在Model和View之间自由流动。在Action中设置的属性值会存储在ValueStack中,然后这些值就可以被JSP页面或者通过OGNL标签在Struts2配置文件中访问。

例如,假设有一个登录功能,登录成功后需要将用户信息传递给JSP页面。在Action中,登录逻辑验证用户信息无误后,会将用户对象放入ValueStack中:

public class LoginAction extends ActionSupport {
    private User user;

    // getter and setter
    public String execute() {
        // 假设登录验证成功
        ValueStack stack = ActionContext.getContext().getValueStack();
        stack.push(user);
        return SUCCESS;
    }
}

在JSP中,可以使用Struts2标签来访问这个用户对象:

<s:property value="user.name" /> <!-- 显示用户名 -->
<s:property value="user.email" /> <!-- 显示用户邮箱 -->

6.2.2 ValueStack与ActionContext的交互

ActionContext是Struts2框架中的一个类,它包含了当前Action的上下文信息,如ValueStack、会话(session)和请求(request)等。ValueStack是ActionContext的一部分,通过ActionContext可以轻松获取和操作ValueStack。

例如,在Action中,我们可能需要根据用户的输入来决定哪些数据需要存储在ValueStack中,之后在JSP页面中展示:

public class SomeAction extends ActionSupport {
    private String someValue;

    public String execute() {
        ActionContext context = ActionContext.getContext();
        ValueStack stack = context.getValueStack();
        stack.push(someValue); // 将someValue添加到栈中
        return SUCCESS;
    }
}

在JSP页面中,可以使用Struts2标签库来展示这个值:

<s:property value="someValue" /> <!-- 显示someValue的值 -->

在实际开发中,了解ValueStack的工作原理和如何与ActionContext互动是优化Struts2应用性能和数据管理的关键。通过合理地利用ValueStack,开发者可以减少不必要的数据传递和业务逻辑处理,提高应用的整体性能。

7. OGNL表达式语言基础

7.1 OGNL概述与特点

7.1.1 OGNL的含义与作用

OGNL(Object-Graph Navigation Language)是一种功能强大的表达式语言,用于获取和设置Java对象的属性。OGNL的主要作用是在Java对象模型中提供了一种简洁的方式来导航和操作对象的属性。它不仅可以操作对象属性,还可以执行字符串表达式、集合操作、逻辑表达式等。在Struts2框架中,OGNL被用来处理页面和后端Java对象之间的数据交互,特别是在值栈(ValueStack)中作为数据访问语言。

7.1.2 OGNL表达式的语法与规则

OGNL表达式的基本语法包括直接访问对象的属性、调用对象的方法、访问静态属性和执行数学运算。OGNL支持简洁的语法来访问嵌套的对象属性,例如 user.address.city 。这种表达式能够直接穿透对象图,访问到user对象的address属性中的city属性。

在Struts2中,OGNL表达式通常以 %{} 的形式出现在JSP页面中,例如 ${user.address.city} 来显示用户的城市地址。OGNL表达式可以嵌入在HTML代码中,也可以嵌入在Struts2标签中。除了基本的访问和调用功能外,OGNL还支持使用 # 符号来调用静态方法或访问静态属性,比如 #{utilClass.staticMethod(param1, param2)}

7.2 OGNL在Struts2中的应用

7.2.1 使用OGNL访问数据

在Struts2中,OGNL是数据传输的主要手段。当你在Action类中设置了一些属性值之后,你可以使用OGNL在JSP页面中获取这些值。例如,如果你有一个Action类,其包含一个名为 username 的属性,你可以通过 ${username} 在JSP页面中获取这个值。

<p>Hello, ${username}!</p>

为了确保OGNL表达式能够正确地访问数据,Struts2提供了一个名为ValueStack的结构,所有从Action类传递到页面的数据都会被压入这个栈中。OGNL能够理解ValueStack的结构,并从中提取出所需的数据。

7.2.2 OGNL与Struts2标签的结合

Struts2的自定义标签(如 <s:property> )可以利用OGNL表达式语言来简化数据的展示。例如,展示用户对象的全名可以使用:

<s:property value="user.fullName" />

在这个例子中, <s:property> 标签会使用OGNL表达式 user.fullName 从ValueStack中获取用户对象的fullName属性。如果用户对象位于栈顶,直接使用 fullName 也能够达到同样的效果。

OGNL还支持复杂的表达式,如遍历集合或映射:

<s:iterator value="users" var="user">
    <p>${user.name}</p>
</s:iterator>

这个例子中,OGNL用于遍历 users 集合,并显示每一个用户的名字。

以上章节内容概述了OGNL在Struts2框架中的基础和应用方式,强调了其在数据操作和页面展示中的关键作用。接下来,我们将深入了解如何利用OGNL表达式进行更复杂的操作,包括集合操作、函数调用等高级用法。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Struts2是一个基于MVC架构的Java Web应用程序框架,它简化了开发过程并提供了对控制流的更好控制。本文是一个初学者友好型的快速入门指南,将引导读者了解Struts2的核心概念,包括Action类、配置文件、MVC模式、拦截器、ValueStack、OGNL表达式语言以及结果类型。教程将一步步带领读者构建一个简单的Struts2项目,从环境搭建到实际操作演练,涵盖从创建Action到添加拦截器的全过程,让读者在实践中快速掌握Struts2的使用。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值