摘要:本文还有配套的精品资源,点击获取 简介: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的依赖。
通过这些配置,我们完成了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"
"***">
在这个配置文件中,我们定义了一个名为 hello 的Action,它映射到 HelloWorldAction 类,并指定了当 execute 方法返回 SUCCESS 时,用户将被重定向到 /success.jsp 页面。
3.2.2 配置Action映射
Action映射是 struts.xml 文件中的核心部分,它将用户请求的URL映射到相应的Action类。在我们的示例中,
3.3 页面交互
3.3.1 创建表单页面
我们将创建一个简单的HTML表单页面,用户可以通过这个表单提交请求到Struts2.0框架。
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" %>
${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之间进行跳转的情况。
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 中配置自定义结果类型:
在本章节中,我们深入探讨了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 文件结构如下:
在这个例子中,我们定义了一个名为 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:
在这个配置中,我们定义了两个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的属性,进行数据绑定或者显示数据。
用户名:
密码:
通过以上内容,我们可以看到OGNL在Struts2.0框架中的应用非常广泛,它简化了数据访问和操作的复杂性,使得开发人员可以更加专注于业务逻辑的实现。
本文还有配套的精品资源,点击获取
简介:Struts2.0是基于MVC设计模式的Java Web开发框架。本教程面向想要深入理解和应用Struts2.0框架的开发者,详细讲解了从基础到高级的各种主题,帮助开发者快速上手并熟练掌握Struts2.0。内容包括框架简介、环境搭建、基础应用、Action与结果处理、配置与拦截器、OGNL表达式语言、国际化与异常处理、Tiles框架集成、插件与第三方库集成、最佳实践与性能优化,以及实战案例分析。本教程通过 .chm 帮助文档格式提供丰富的索引和搜索功能,方便开发者学习。
本文还有配套的精品资源,点击获取
