Struts 2 快速入门简介

2025-05-26 05:19:54 2014德国世界杯

1. 引言

Apache Struts 2 是一个基于MVC的企业级Java Web应用框架。它是原始Struts框架的完全重写,提供了开源API实现和丰富的功能集。

在这篇教程中,我们将对Struts2框架的核心组件进行初级介绍,并展示如何使用它们。

2. Struts 2框架概述

Struts 2 的一些特性包括:

基于POJO(Plain Old Java Objects)的动作:POJO意味着它不属于任何类型层次结构,可以作为独立的类使用。

插件支持REST、AJAX、Hibernate、Spring等

约定优于配置:简化了配置过程。

支持多种视图层技术

易于性能分析和调试

2.1. Struts2的不同组件

Struts2是一个基于MVC的框架,所有Struts2应用都包含以下三个组件:

动作类(Action class):一个POJO类,用于实现业务逻辑。

控制器(Controller):在Struts2中,HTTP过滤器充当控制器,负责拦截和验证请求/响应。

视图(View):用于呈现处理后的数据,通常是JSP文件。

3. 设计我们的应用

现在让我们开始开发Web应用。这是一个用户选择特定汽车品牌后,会收到定制消息的应用。

3.1. Maven依赖

在pom.xml中添加以下内容:

org.apache.struts

struts2-core

2.5.10

org.apache.struts

struts2-junit-plugin

2.5.10

org.apache.struts

struts2-convention-plugin

2.5.10

您可以在这里找到最新版本的依赖。

3.2. 业务逻辑

创建一个动作类CarAction,它根据输入值返回一条消息。CarAction有两个字段:carName(用于存储用户输入)和carMessage(用于存储要显示的定制消息):

public class CarAction {

private String carName;

private String carMessage;

private CarMessageService carMessageService = new CarMessageService();

public String execute() {

this.setCarMessage(this.carMessageService.getMessage(carName));

return "success";

}

// getters and setters

}

CarAction类使用CarMessageService,该服务为特定的汽车品牌提供定制消息:

public class CarMessageService {

public String getMessage(String carName) {

if (carName.equalsIgnoreCase("ferrari")){

return "Ferrari Fan!";

}

else if (carName.equalsIgnoreCase("bmw")){

return "BMW Fan!";

}

else {

return "please choose ferrari Or bmw";

}

}

}

3.3. 接受用户输入

添加一个JSP,这是我们应用的入口点。这是input.jsp文件的内容:

Welcome to Baeldung Struts 2 app

Which car do you like !!

Please choose ferrari or bmw

标签指定了表单的提交动作(在我们的例子中,是向GET请求的HTTP URI发送请求)。

3.4. 控制器部分

StrutsPrepareAndExecuteFilter是控制器,它会拦截所有传入的请求。我们需要在web.xml中注册以下过滤器:

struts2

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

struts2

/*

StrutsPrepareAndExecuteFilter会过滤每个传入的请求,因为我们指定了URL匹配通配符/\*

3.5. 配置应用程序

在动作类CarAction上添加以下注解:

@Namespace("/tutorial")

@Action("/car")

@Result(name = "success", location = "/result.jsp")

这些注解的逻辑如下:

@Namespace用于逻辑分离不同动作类的请求URI;我们需要在请求中包含这个值。

@Action指定了请求URI的实际终点,将命中我们的动作类。动作类会咨询CarMessageService并初始化另一个成员变量carMessage的值。当execute()方法返回一个值(如“success”)时,它会匹配这个值来调用result.jsp。

@Result有两个参数。第一个参数name指定了动作类将返回的值,这来自动作类的execute()方法。这是默认执行的方法名。

第二个参数location告诉在execute()方法返回值后要引用的文件。在这里,当我们返回一个字符串值“success”时,我们将转发请求到result.jsp。

同样的配置也可以通过提供XML配置文件来实现:

/result.jsp

3.6. 视图

这是将用于向用户显示消息的result.jsp内容:

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

<%@ taglib prefix="s" uri="/struts-tags" %>

Hello Baeldung User

You are a

需要注意两点:

在<%@ taglib prefix="s" uri="/struts-tags %>中,我们导入了struts-tags库。

中,我们使用struts-tags库来打印carMessage属性的值。

4. 运行应用程序

这个Web应用可以在任何Web容器中运行,例如Apache Tomcat。以下是实现步骤:

部署Web应用后,在浏览器中访问以下URL:http://www.localhost.com:8080/MyStrutsApp/input.jsp

选择两个选项之一并提交请求。

您将被转发到result.jsp页面,显示根据所选输入选项定制的消息。

5. 总结

在这篇教程中,我们逐步指导了如何创建第一个Struts2 Web应用。我们在Struts2领域涵盖了与MVC相关的各个方面,并展示了如何将它们组合起来进行开发。

如往常一样,这篇教程可在GitHub上找到,作为Maven项目。

最新发表
友情链接