Struts2.0中文教程:从入门到实战

admin 3745次浏览

摘要:本文还有配套的精品资源,点击获取 简介:Struts2.0是基于MVC设计模式的Java Web开发框架。本教程面向想要深入理解和应用Struts2.0框架的开发者,

本文还有配套的精品资源,点击获取

简介:Struts2.0是基于MVC设计模式的Java Web开发框架。本教程面向想要深入理解和应用Struts2.0框架的开发者,详细讲解了从基础到高级的各种主题,帮助开发者快速上手并熟练掌握Struts2.0。内容包括框架简介、环境搭建、基础应用、Action与结果处理、配置与拦截器、OGNL表达式语言、国际化与异常处理、Tiles框架集成、插件与第三方库集成、最佳实践与性能优化,以及实战案例分析。本教程通过 .chm 帮助文档格式提供丰富的索引和搜索功能,方便开发者学习。

1. Struts2.0框架概述

Struts2.0是Apache软件基金会赞助的一个开源的MVC(模型-视图-控制器)框架,主要用于开发Web应用程序。Struts2.0建立在WebWork框架的基础之上,提供了丰富的功能,包括但不限于易于使用的Action类、灵活的拦截器机制、OGNL表达式语言和丰富的标签库。

Struts2.0的核心特性之一是其拦截器架构,它允许开发者在请求处理的不同阶段插入自定义逻辑,从而实现诸如数据验证、日志记录、文件上传等功能。此外,Struts2.0还支持类型转换、国际化、异常处理等功能,极大地简化了Web应用的开发过程。

在实际开发中,Struts2.0通过struts.xml文件来配置Action映射,使得开发者可以很容易地管理Web应用中的各种请求和响应。它还支持插件架构,允许开发者根据需要引入额外的功能模块,从而扩展Struts2.0框架的能力。

2. 环境搭建步骤

2.1 系统要求与下载

2.1.1 支持的操作系统

Struts2.0框架支持多种操作系统,包括但不限于Windows、Linux、macOS等。在本章节中,我们将详细介绍在不同操作系统上安装和配置Struts2.0框架的步骤。

2.1.2 必要的软件和工具

在开始搭建环境之前,我们需要准备一些必要的软件和工具: - Java Development Kit (JDK) : Struts2.0是基于Java平台的,因此需要安装JDK。 - Integrated Development Environment (IDE) : 推荐使用Eclipse或IntelliJ IDEA等IDE来开发Struts2.0项目。 - Apache Ant 或 Maven : 这些构建工具可以帮助我们自动化构建过程。

2.2 安装与配置

2.2.1 安装Struts2.0框架

安装Struts2.0框架通常涉及到下载Struts2.0的jar包,并将其添加到项目的classpath中。以下是具体的步骤:

访问Apache Struts官方网站,下载最新的Struts2.0二进制发行版。 解压下载的文件到指定目录。 将解压后的 struts2-core-x.y.z.jar 文件添加到项目的classpath中。

2.2.2 配置环境变量

为了在命令行中方便地使用Struts2.0相关的命令,我们需要配置环境变量。以下是配置环境变量的步骤:

打开系统属性,进入“高级”选项卡。 点击“环境变量”按钮。 在“系统变量”区域,点击“新建”,添加一个名为 CLASSPATH 的变量,其值包含 struts2-core-x.y.z.jar 的路径。

2.2.3 创建第一个Struts2.0项目

使用IDE创建一个新的Web项目,并配置Struts2.0的支持。以下是使用Eclipse创建项目的步骤:

打开Eclipse,选择“File” > “New” > “Dynamic Web Project”。 输入项目名称,并点击“Next”。 在“Target runtime”下拉菜单中选择支持的Servlet容器,例如Apache Tomcat。 在“Project Facets”页面,确保“Dynamic Web Module”已选中,并点击“Next”。 在“Libraries”页面,点击“Add Library…”按钮,选择“User Library”并创建一个新库,将 struts2-core-x.y.z.jar 添加到这个库中。

2.3 开发工具配置

2.3.1 IDE集成开发环境配置

大多数现代IDE都提供了对Struts2.0的支持。这里以Eclipse为例,说明如何配置IDE来支持Struts2.0开发。

在Eclipse中安装Struts2插件,例如“Struts2 Plugin”。 创建一个Struts2项目后,插件会自动配置Struts2相关的库和文件。 通过插件,可以方便地创建Struts2 Action类、配置文件等。

2.3.2 项目结构与目录布局

Struts2.0项目的目录结构通常如下所示:

MyStruts2Project/

├── src/

│ ├── main/

│ │ ├── java/

│ │ ├── resources/

│ │ └── webapp/

│ │ ├── WEB-INF/

│ │ │ ├── web.xml

│ │ │ └── struts.xml

│ │ └── index.jsp

│ └── test/

└── pom.xml

2.3.3 依赖管理和构建工具使用

在本章节中,我们将介绍如何使用Maven来管理Struts2.0项目的依赖。以下是配置Maven依赖的步骤:

在项目根目录下创建 pom.xml 文件。 在 pom.xml 中添加Struts2的依赖。

org.apache.struts

struts2-core

2.5.x

通过这些配置,我们完成了Struts2.0环境的搭建,为后续的学习和开发打下了坚实的基础。

3. Hello World示例应用

在本章节中,我们将通过一个简单的"Hello World"示例应用,深入探讨Struts2.0框架的基本工作原理和开发流程。这个示例将涵盖创建Action类、配置 struts.xml 文件、页面交互等多个方面,为后续章节的深入学习打下坚实的基础。

3.1 创建Action类

3.1.1 Action接口和类的定义

在Struts2.0框架中,Action是处理业务逻辑的核心组件。一个Action类通常包含一个或多个业务处理方法,这些方法会响应用户的请求并返回一个结果字符串。在我们的"Hello World"示例中,我们将定义一个简单的Action类,它包含一个 execute 方法。

package com.example.actions;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

private String message;

public String execute() {

message = "Hello, World!";

return SUCCESS;

}

public String getMessage() {

return message;

}

}

在这个例子中, HelloWorldAction 类继承自 ActionSupport 类,这是一个预定义的Action基类,它提供了基本的Action功能,如 execute 方法和结果常量。

3.1.2 实现execute方法

execute 方法是Action的核心,它代表了Action的默认执行逻辑。在 HelloWorldAction 中,我们简单地将一个消息字符串赋值给 message 属性,并返回 SUCCESS ,这是一个预定义的结果常量,指示执行成功。

public String execute() {

message = "Hello, World!";

return SUCCESS;

}

3.1.3 Action类的生命周期

Action类的生命周期包括多个阶段:实例化、初始化、调用 execute 或其它业务方法、销毁。Struts2.0框架会自动管理Action的生命周期,开发者通常只需要关注业务逻辑的实现。

3.2 配置struts.xml

3.2.1 struts.xml文件结构

struts.xml 是Struts2.0框架的核心配置文件,它定义了Action映射、结果类型、拦截器等配置信息。下面是一个简单的 struts.xml 配置文件示例:

"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"

"***">

/success.jsp

在这个配置文件中,我们定义了一个名为 hello 的Action,它映射到 HelloWorldAction 类,并指定了当 execute 方法返回 SUCCESS 时,用户将被重定向到 /success.jsp 页面。

3.2.2 配置Action映射

Action映射是 struts.xml 文件中的核心部分,它将用户请求的URL映射到相应的Action类。在我们的示例中, 标签定义了映射关系。

3.3 页面交互

3.3.1 创建表单页面

我们将创建一个简单的HTML表单页面,用户可以通过这个表单提交请求到Struts2.0框架。

Hello World Form

3.3.2 表单提交与数据处理

当用户点击提交按钮时,表单数据将被发送到服务器,并由Struts2.0框架处理。根据 struts.xml 的配置,请求将被映射到 HelloWorldAction 的 execute 方法。

3.3.3 结果页面展示

在 execute 方法中,我们设置了 message 属性,并返回了 SUCCESS 。根据 struts.xml 中的配置,用户将被重定向到 /success.jsp 页面,并可以在页面上展示 message 属性的值。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Hello World Result

${message}

在这个简单的"Hello World"示例应用中,我们展示了如何创建Action类、配置 struts.xml 文件、处理页面交互等基础知识。这为进一步学习Struts2.0框架的高级特性打下了坚实的基础。

本章节通过一个简单的"Hello World"示例应用,介绍了Struts2.0框架的基本使用流程。在接下来的章节中,我们将逐步深入探讨Action类的生命周期、 struts.xml 的详细配置、OGNL表达式语言的使用等高级主题,帮助读者全面掌握Struts2.0框架的精髓。

4. Action类与结果类型

4.1 Action类深入

4.1.1 Action的生命周期

Action类在Struts2.0框架中扮演着核心的角色,它的生命周期是每个开发者都应该掌握的基础知识。Action的生命周期从一个HTTP请求开始,到请求处理完成并返回响应结束。在请求被拦截器拦截之前,Action并没有被实例化。一旦拦截器完成了它的预处理工作,Struts框架会根据配置创建Action的实例。

在创建实例之后,Struts框架会调用Action的 execute() 方法,这是Action生命周期的核心部分。 execute() 方法是处理业务逻辑的地方。在这个方法返回之后,Struts框架会根据返回值找到对应的结果页面进行展示。

最后,在Action的生命周期结束时,Struts框架会进行清理工作,这包括释放资源和调用 destroy() 方法。 destroy() 方法是在Action生命周期的最后被调用的,可以用于进行一些清理工作,例如关闭数据库连接或者日志文件。

4.1.2 Action的继承和接口

Action是一个接口,它的默认实现是 ActionSupport ,我们通常会继承 ActionSupport 来创建我们的Action类。继承 ActionSupport 不仅提供了默认的错误处理和国际化支持,还提供了 SUCCESS 、 ERROR 等预定义的结果常量,这些常量在定义结果页面时非常有用。

除了继承 ActionSupport ,我们还可以直接实现 Action 接口,或者继承其他实现了 Action 接口的类。这为开发者提供了灵活性,可以根据需求选择不同的实现方式。例如,如果我们的Action类需要实现一些额外的业务逻辑接口,我们可以选择直接实现 Action 接口而不是继承 ActionSupport 。

public class MyAction implements Action {

private String name;

private int age;

// ... 其他属性和getter/setter方法

@Override

public String execute() throws Exception {

// 业务逻辑处理

return SUCCESS; // 返回结果常量

}

}

在实现 execute() 方法时,我们通常会进行以下步骤: 1. 从ActionContext获取请求上下文信息。 2. 执行业务逻辑。 3. 根据业务逻辑执行的结果选择返回的结果常量。

4.2 结果类型详解

4.2.1 常见结果类型介绍

Struts2.0框架提供了多种结果类型,这些结果类型定义了Action执行后如何响应客户端请求。最常见的结果类型包括 dispatcher 、 redirect 和 redirectAction 。

dispatcher :这是默认的结果类型,它会将请求转发到结果页面。这种方式适用于请求和响应都由Struts框架处理的情况。 redirect :这个结果类型会使浏览器进行一个完全的HTTP重定向。这种方式适用于需要客户端发起一个全新的请求到另一个URL的情况。 redirectAction :这个结果类型将请求重定向到另一个Action,这种方式适用于需要在不同Action之间进行跳转的情况。

/success.jsp

/error.jsp

4.2.2 自定义结果类型

除了使用内置的结果类型,我们还可以根据业务需求创建自定义的结果类型。自定义结果类型需要继承 Result 类,并实现 execute() 方法。在 execute() 方法中,我们可以定义自己的逻辑来处理请求和响应。

public class CustomResult extends Result {

private String message;

public void setMessage(String message) {

this.message = message;

}

@Override

public void execute(ActionInvocation invocation) throws Exception {

// 自定义逻辑处理

// 例如,设置请求属性

invocation.getInvocationContext(). put("message", message);

// 调用默认的结果处理

super.execute(invocation);

}

}

在 struts.xml 中配置自定义结果类型:

/custom.jsp

在本章节中,我们深入探讨了Action类的生命周期和继承方式,以及结果类型的使用和自定义。通过具体代码示例和配置,我们展示了如何在Struts2.0框架中灵活运用这些概念来构建强大的Web应用程序。

5. 核心配置与拦截器

5.1 核心配置文件解析

5.1.1 struts.xml配置概述

Struts2.0框架的核心配置文件是 struts.xml ,它位于 WEB-INF/classes 目录或者 src/main/resources 目录下。这个文件定义了Action映射、拦截器栈、结果类型以及全局异常处理等。所有的Struts2.0配置项都可以在这个XML文件中进行配置。

一个典型的 struts.xml 文件结构如下:

/success.jsp

/input.jsp

在这个例子中,我们定义了一个名为 hello 的Action,它属于 default 包,并且继承自 struts-default 。当访问 hello action时,根据执行的结果返回不同的页面。

5.1.2 常用配置项详解

package

package 是 struts.xml 中的基本组织单元,它用来将相关的Action分组。每个 package 可以定义自己的命名空间、拦截器栈和其他配置项。

action

action 元素是 struts.xml 中最核心的配置项之一,它定义了一个具体的请求处理逻辑。 action 元素通常包含 name 、 class 和 method 属性,分别代表请求的名称、处理类的完全限定名和处理方法。

result

result 元素定义了Action执行后返回的结果页面。每个 action 可以配置多个 result ,对应不同的处理结果。例如,成功执行 execute 方法返回 success 结果,错误执行返回 input 结果。

interceptor

interceptor 元素定义了一个拦截器,拦截器可以拦截Action的执行过程,进行预处理和后处理。Struts2.0提供了一些内置拦截器,如 token 拦截器用于防止表单重复提交, exception 拦截器用于处理Action中抛出的异常。

5.1.3 配置示例

下面是一个配置示例,展示了如何配置一个名为 user 的包,包含登录和注销的Action:

/welcome.jsp

/login.jsp

login.jsp

在这个配置中,我们定义了两个Action: login 和 logout 。 login Action根据执行结果返回 success 或 error ,而 logout Action则重定向到 login.jsp 。

5.2 拦截器概念与应用

5.2.1 拦截器基础

拦截器(Interceptor)是Struts2.0框架中的一个重要概念,它是一种设计模式,用于拦截Action的调用,以便在Action执行前后进行预处理和后处理。拦截器可以用来实现日志记录、权限检查、异常处理等功能。

5.2.2 创建自定义拦截器

创建自定义拦截器需要实现 Interceptor 接口或者继承 AbstractInterceptor 类。下面是一个自定义拦截器的示例:

public class MyInterceptor extends AbstractInterceptor {

@Override

public String intercept(ActionInvocation invocation) throws Exception {

// pre-handle logic

System.out.println("Before Action execution");

// continue to the next interceptor or action

String result = invocation.invoke();

// post-handle logic

System.out.println("After Action execution");

return result;

}

}

在 intercept 方法中,我们可以在调用 invocation.invoke() 之前和之后执行自定义逻辑。

5.2.3 拦截器链的使用

拦截器可以组合成一个拦截器链,请求会依次通过拦截器链中的每个拦截器。在Struts2.0配置文件中,可以通过 元素定义拦截器链:

在这个配置中,我们定义了一个名为 myInterceptor 的拦截器,并将其设置为默认拦截器。

5.3 代码逻辑逐行解读

在自定义拦截器的代码中, intercept 方法是核心,其逻辑如下:

在Action执行前打印"Before Action execution"。 调用 invocation.invoke() 继续执行拦截器链中的下一个元素或Action本身。 Action执行后打印"After Action execution"。 返回结果字符串。

这种结构允许开发者在Action执行前后插入自定义逻辑,从而实现各种功能,如权限检查、日志记录等。

6. OGNL表达式语言

OGNL(Object-Graph Navigation Language)是一种功能强大的表达式语言,用于获取和设置Java对象的属性。它在Struts2.0中被广泛使用,尤其是在表单标签和结果类型中,用于简化数据的访问和操作。

6.1 OGNL基本语法

6.1.1 OGNL表达式基础

OGNL表达式的语法类似于Java代码,但它更加简洁。例如,访问一个对象的属性可以简单地通过点号 . 进行,而不必调用getter方法。如果属性名包含特殊字符或者关键字,可以使用方括号 [] 进行访问。

// 假设有一个名为user的Java对象

user.name // 访问user对象的name属性

user["address"] // 访问user对象的address属性,等同于user.getAddress()

6.1.2 访问对象属性和方法

OGNL不仅可以访问属性,还可以调用方法。如果你需要访问一个对象的方法,可以将方法名和参数列表放在圆括号中。

user.getName() // 调用user对象的getName方法

user.getAddress().getCity() // 调用级联方法

6.2 OGNL高级特性

6.2.1 集合操作

OGNL提供了强大的集合操作功能,可以轻松地在集合中进行遍历、选择和映射等操作。

users.?[age > 18] // 选择年龄大于18岁的用户

users.![name] // 获取所有用户的名称

users.^[name] // 获取第一个用户的名称

6.2.2 表达式运算符

OGNL支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等,使得表达式更加灵活。

a + b // 算术加法

a == b // 比较是否相等

a && b // 逻辑与

6.3 OGNL与Struts2.0集成

6.3.1 在Action中使用OGNL

在Struts2.0中,OGNL被用来访问Action中的属性。在表单标签中,可以直接使用OGNL表达式来引用Action的属性。

用户名:

密码:

6.3.2 在JSP页面使用OGNL

在JSP页面中,OGNL同样被广泛使用。你可以使用OGNL表达式来访问Action的属性,进行数据绑定或者显示数据。

// 显示Action中的username属性

用户名:

密码:

通过以上内容,我们可以看到OGNL在Struts2.0框架中的应用非常广泛,它简化了数据访问和操作的复杂性,使得开发人员可以更加专注于业务逻辑的实现。

本文还有配套的精品资源,点击获取

简介:Struts2.0是基于MVC设计模式的Java Web开发框架。本教程面向想要深入理解和应用Struts2.0框架的开发者,详细讲解了从基础到高级的各种主题,帮助开发者快速上手并熟练掌握Struts2.0。内容包括框架简介、环境搭建、基础应用、Action与结果处理、配置与拦截器、OGNL表达式语言、国际化与异常处理、Tiles框架集成、插件与第三方库集成、最佳实践与性能优化,以及实战案例分析。本教程通过 .chm 帮助文档格式提供丰富的索引和搜索功能,方便开发者学习。

本文还有配套的精品资源,点击获取

相关文章
友情链接