- Struts 2 教程
- Struts2 - 主页
- Struts2 - 基本 MVC 架构
- Struts2 - 概述
- Struts2 - 环境设置
- Struts2 - 架构
- Struts2 - 示例
- Struts2 - 配置
- Struts2 - 动作
- Struts2 - 拦截器
- Struts2 - 结果类型
- Struts2 - 价值堆栈/OGNL
- Struts2 - 文件上传
- Struts2 - 数据库访问
- Struts2 - 发送电子邮件
- Struts2 - 验证
- Struts2 - 本地化
- Struts2 - 类型转换
- Struts2 - 主题/模板
- Struts2 - 异常处理
- Struts2 - 注释
- Struts 2 集成
- Struts2-Spring
- Struts2 - 瓷砖
- Struts2-Hibernate
- Struts 2 有用资源
- Struts2 - 问题与解答
- Struts2 - 快速指南
- Struts2 - 有用的资源
- Struts2 - 讨论
Struts 2 - Hello World 示例
正如您已经从 Struts 2 架构中了解到的那样,当您在 Struts 2 Web 应用程序中单击超链接或提交 HTML 表单时,控制器会收集输入,并将其发送到名为 Actions 的 Java 类。Action执行后,结果会选择一个资源来呈现响应。该资源通常是 JSP,但也可以是 PDF 文件、Excel 电子表格或 Java applet 窗口。
假设您已经构建了开发环境。现在,让我们继续构建我们的第一个Hello World Struts2项目。该项目的目标是构建一个 Web 应用程序,用于收集用户名并显示“Hello World”,后跟用户名。
我们必须为任何 Struts 2 项目创建以下四个组件 -
先生编号 | 组件及描述 |
---|---|
1 | 行动 创建一个操作类,它将包含完整的业务逻辑并控制用户、模型和视图之间的交互。 |
2 | 拦截器 如果需要,创建拦截器,或使用现有拦截器。这是控制器的一部分。 |
3 | 看法 创建 JSP 与用户交互以获取输入并呈现最终消息。 |
4 | 配置文件 创建配置文件来耦合操作、视图和控制器。这些文件是struts.xml、web.xml、struts.properties。 |
我将使用 Eclipse IDE,以便在动态 Web 项目下创建所有必需的组件。现在让我们开始创建动态 Web 项目。
创建动态 Web 项目
启动 Eclipse,然后选择“文件”>“新建”>“动态 Web 项目”,输入项目名称为HelloWorldStruts2,并按照以下屏幕所示设置其余选项 -
在接下来的屏幕中选择所有默认选项,最后选中“生成 Web.xml 部署描述符”选项。这将在 Eclipse 中为您创建一个动态 Web 项目。现在选择Windows > Show View > Project Explorer,您将看到项目窗口,如下所示 -
现在将以下文件从 struts 2 lib 文件夹C:\struts-2.2.3\lib复制到我们项目的WEB-INF\lib文件夹。为此,您只需将以下所有文件拖放到 WEB-INF\lib 文件夹中即可。
- 公共文件上传-xyzjar
- 公共 io-xyzjar
- commons-lang-xyjar
- 公共日志记录 xyzjar
- commons-logging-api-xyjar
- freemarker-xyzjar
- javassist-.xy.z.GA
- 奥格尼-xyzjar
- struts2-核心-xyzjar
- xwork-core.xyzjar
创建动作类
Action类是Struts 2应用程序的关键,我们在Action类中实现大部分业务逻辑。因此,让我们在Java Resources > src下创建一个 java 文件 HelloWorldAction.java ,包名为com.tutorialspoint.struts2,其内容如下。
当用户单击 URL 时,Action 类响应用户操作。执行 Action 类的一个或多个方法并返回 String 结果。根据结果的值,呈现特定的 JSP 页面。
package com.tutorialspoint.struts2; public class HelloWorldAction { private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
这是一个非常简单的类,具有一个名为“name”的属性。我们为“name”属性提供了标准的 getter 和 setter 方法,以及返回字符串“success”的执行方法。
Struts 2框架将创建HelloWorldAction类的对象并调用执行的方法来响应用户的操作。您将业务逻辑放入此方法中,该方法最终返回 String 常量。换句话说,对于每个 URL,您必须实现一个操作类,并且您可以直接使用该类名称作为操作名称,也可以使用 struts.xml 文件映射到其他名称,如下所示。
创建视图
我们需要一个 JSP 来呈现最终消息,当发生预定义操作时,Struts 2 框架将调用此页面,并且此映射将在 struts.xml 文件中定义。因此,让我们在 Eclipse 项目的 WebContent 文件夹中创建以下 jsp 文件HelloWorld.jsp 。为此,请右键单击项目资源管理器中的 WebContent 文件夹,然后选择“新建”>“JSP 文件”。
<%@ page contentType = "text/html; charset = UTF-8" %> <%@ taglib prefix = "s" uri = "/struts-tags" %> <html> <head> <title>Hello World</title> </head> <body> Hello World, <s:property value = "name"/> </body> </html>
taglib 指令告诉 Servlet 容器该页面将使用Struts 2标记,并且这些标记前面将带有s。
s:property 标记显示由HelloWorldAction 类的getName()方法返回的操作类属性“name> 的值。
创建主页
我们还需要在 WebContent 文件夹中创建index.jsp 。该文件将用作初始操作 URL,用户可以单击该 URL 来告诉 Struts 2 框架调用 HelloWorldAction 类的已定义方法并呈现 HelloWorld.jsp 视图。
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1" pageEncoding = "ISO-8859-1"%> <%@ taglib prefix = "s" uri = "/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World From Struts2</h1> <form action = "hello"> <label for = "name">Please enter your name</label><br/> <input type = "text" name = "name"/> <input type = "submit" value = "Say Hello"/> </form> </body> </html>
上述视图文件中定义的hello操作将使用 struts.xml 文件映射到 HelloWorldAction 类及其执行方法。当用户单击“提交”按钮时,Struts 2 框架将运行 HelloWorldAction 类中定义的执行方法,并根据该方法的返回值,选择适当的视图并将其呈现为响应。
配置文件
我们需要一个映射来将 URL、HelloWorldAction 类(模型)和 HelloWorld.jsp(视图)联系在一起。该映射告诉 Struts 2 框架哪个类将响应用户的操作(URL)、将执行该类的哪个方法以及根据该方法返回的 String 结果呈现哪个视图。
因此,让我们创建一个名为struts.xml的文件。由于 Struts 2 要求 struts.xml 存在于类文件夹中。因此,在 WebContent/WEB-INF/classes 文件夹下创建 struts.xml 文件。Eclipse 默认情况下不会创建“classes”文件夹,因此您需要自己创建。为此,请右键单击项目资源管理器中的 WEB-INF 文件夹,然后选择“新建”>“文件夹”。你的 struts.xml 应该看起来像 -
<?xml version = "1.0" Encoding = "UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name = "struts.devMode" value = "true" /> <package name = "helloworld" extends = "struts-default"> <action name = "hello" class = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success">/HelloWorld.jsp</result> </action> </package> </struts>
关于上述配置文件,需要理解几句话。在这里,我们将常量struts.devMode设置为true,因为我们在开发环境中工作,需要查看一些有用的日志消息。然后,我们定义一个名为helloworld的包。
当您想要将操作组合在一起时,创建包非常有用。在我们的示例中,我们将操作命名为“hello”,它对应于 URL /hello.action并由HelloWorldAction.class支持。HelloWorldAction.class的execute 方法是在调用URL /hello.action时运行的方法。如果执行方法的结果返回“成功”,那么我们将用户带到HelloWorld.jsp。
下一步是创建一个web.xml文件,它是对 Struts 2 的任何请求的入口点。Struts2 应用程序的入口点将是部署描述符 (web.xml) 中定义的过滤器。因此,我们将在 web.xml 中定义 org.apache.struts2.dispatcher.FilterDispatcher 类的条目。需要在WebContent下的WEB-INF文件夹下创建web.xml文件。当您创建项目时,Eclipse 已经为您创建了一个框架 web.xml 文件。因此,我们只需将其修改如下 -
<?xml version = "1.0" Encoding = "UTF-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
我们已指定index.jsp 作为我们的欢迎文件。然后我们将 Struts2 过滤器配置为在所有 url 上运行(即与模式 /* 匹配的任何 url)
启用详细日志
您可以在使用 Struts 2 时通过在WEB-INF/classes文件夹下创建logging.properties文件来启用完整的日志记录功能。将以下两行保留在属性文件中 -
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = \ java.util.logging.ConsoleHandler
默认的logging.properties指定一个ConsoleHandler用于将日志记录路由到stdout以及一个FileHandler。可以使用 SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST 或 ALL 设置处理程序的日志级别阈值。
就是这样。我们已准备好使用 Struts 2 框架运行 Hello World 应用程序。
执行申请的程序
右键单击项目名称,然后单击“导出”>“WAR 文件”以创建 War 文件。
然后将此 WAR 部署到 Tomcat 的 webapps 目录中。
最后,启动 Tomcat 服务器并尝试访问 URL http://localhost:8080/HelloWorldStruts2/index.jsp。这将为您提供以下屏幕 -
输入值“Struts2”并提交页面。您应该看到下一页
请注意,您可以将索引定义为 struts.xml 文件中的操作,在这种情况下,您可以将索引页面调用为http://localhost:8080/HelloWorldStruts2/index.action。检查下面如何将索引定义为操作 -
<?xml version = "1.0" Encoding = "UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name = "struts.devMode" value = "true" /> <package name = "helloworld" extends = "struts-default"> <action name = "index"> <result >/index.jsp</result> </action> <action name = "hello" class = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success">/HelloWorld.jsp</result> </action> </package> </struts>