Struts - Hello World 示例



  • 简述

    正如您已经从 Struts 2 架构中了解到的,当您在 Struts 2 Web 应用程序中单击超链接或提交 HTML 表单时,控制器会收集输入,并将其发送到名为 Actions 的 Java 类。执行完Action 后,结果会选择一个资源来呈现响应。资源通常是 JSP,但也可以是 PDF 文件、Excel 电子表格或 Java 小程序窗口。
    假设您已经构建了您的开发环境。现在,让我们继续构建我们的第一个Hello World Struts2项目。该项目的目的是构建一个收集用户名并显示“Hello World”后跟用户名的 Web 应用程序。
    我们必须为任何 Struts 2 项目创建以下四个组件 -
    序号 组件和描述
    1
    Action
    创建一个动作类,它将包含完整的业务逻辑并控制用户、模型和视图之间的交互。
    2
    Interceptors
    如果需要,创建拦截器,或使用现有的拦截器。这是控制器的一部分。
    3
    View
    创建 JSP 以与用户交互以获取输入并呈现最终消息。
    4
    Configuration Files
    创建配置文件以耦合操作、视图和控制器。这些文件是 struts.xml、web.xml、struts.properties。
    我将使用 Eclipse IDE,以便在动态 Web 项目下创建所有必需的组件。现在让我们开始创建动态 Web 项目。
  • 创建动态 Web 项目

    启动你的 Eclipse 然后继续 File > New > Dynamic Web Project 并输入项目名称作为 HelloWorldStruts2 并设置以下屏幕中给出的其余选项 -
    hello world Sturts1
    在接下来的屏幕中选择所有默认选项,最后检查 Generate Web.xml deployment descriptor选项。这将在 Eclipse 中为您创建一个动态 Web 项目。现在去Windows > Show View > Project Explorer,您将看到您的项目窗口如下 -
    hello world Sturts2
    现在从 struts 2 lib 文件夹复制以下文件 C:\struts-2.2.3\lib 到我们项目的 WEB-INF\lib文件夹。为此,您只需将以下所有文件拖放到 WEB-INF\lib 文件夹中即可。
    • commons-fileupload-x.y.z.jar
    • commons-io-x.y.z.jar
    • commons-lang-x.y.jar
    • commons-logging-x.y.z.jar
    • commons-logging-api-x.y.jar
    • freemarker-x.y.z.jar
    • javassist-.xy.z.GA
    • ognl-x.y.z.jar
    • struts2-core-x.y.z.jar
    • xwork-core.x.y.z.jar
  • 创建动作类

    Action 类是 Struts 2 应用程序的关键,我们在 action 类中实现了大部分业务逻辑。那么让我们在下面创建一个java文件HelloWorldAction.javaJava Resources > src 带有包名 com.jc2182.struts2 与下面给出的内容。
    当用户单击 URL 时,Action 类响应用户操作。执行一个或多个 Action 类的方法并返回一个 String 结果。根据结果​​的值,呈现特定的 JSP 页面。
    
    package com.jc2182.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”的 execute 方法。
    Struts 2 框架将创建一个对象 HelloWorldAction类并调用已执行的方法以响应用户的操作。您将业务逻辑放在此方法中,该方法最终返回 String 常量。换句话说,对于每个 URL,您必须实现一个操作类,并且您可以直接使用该类名作为您的操作名,或者您可以使用 struts.xml 文件映射到其他名称,如下所示。
  • 创建视图

    我们需要一个 JSP 来呈现最终的消息,当一个预定义的动作发生时,这个页面将被 Struts 2 框架调用,这个映射将在 struts.xml 文件中定义。所以让我们创建下面的jsp文件HelloWorld.jsp在 eclipse 项目的 WebContent 文件夹中。为此,右键单击项目资源管理器中的 WebContent 文件夹并选择New >JSP File.
    
    <%@ 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 标签显示方法返回的动作类属性“name>”的值 getName() HelloWorldAction 类的。
  • 创建主页

    我们还需要创建 index.jsp在 WebContent 文件夹中。该文件将用作初始操作 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 类中定义的 execute 方法,并基于该方法的返回值,将选择适当的视图并将其呈现为响应。
  • 配置文件

    我们需要一个映射来将 URL、HelloWorldAction 类(模型)和 HelloWorld.jsp(视图)联系在一起。该映射告诉 Struts 2 框架哪个类将响应用户的操作(URL),该类的哪个方法将被执行,以及基于该方法返回的 String 结果呈现哪个视图。
    所以让我们创建一个名为 struts.xml. 由于 Struts 2 要求在 classes 文件夹中存在 struts.xml。因此,在 WebContent/WEB-INF/classes 文件夹下创建 struts.xml 文件。默认情况下,Eclipse 不会创建“classes”文件夹,因此您需要自己创建。为此,右键单击项目资源管理器中的 WEB-INF 文件夹并选择New > Folder. 你的 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.jc2182.struts2.HelloWorldAction" 
             method = "execute">
             <result name = "success">/HelloWorld.jsp</result>
          </action>
       </package>
    </struts>
    
    关于上述配置文件需要理解的几句话。在这里,我们设置常数struts.devModetrue,因为我们在开发环境中工作,我们需要看到一些有用的日志信息。然后,我们定义一个名为的包helloworld.
    当您想将操作组合在一起时,创建包很有用。在我们的例子中,我们将我们的动作命名为“hello”,它对应于 URL/hello.action 并由HelloWorldAction.class. 这execute 的方法 HelloWorldAction.class 是 URL 时运行的方法 /hello.action被调用。如果 execute 方法的结果返回“成功”,那么我们将用户带到HelloWorld.jsp.
    下一步是创建一个 web.xml文件是对 Struts 2 的任何请求的入口点。Struts2 应用程序的入口点将是部署描述符 (web.xml) 中定义的过滤器。因此,我们将在 web.xml 中定义一个 org.apache.struts2.dispatcher.FilterDispatcher 类的条目。web.xml 文件需要在 WebContent 下的 WEB-INF 文件夹下创建。当您创建项目时,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 时启用完整的日志记录功能,方法是创建 logging.properties 文件下 WEB-INF/classes文件夹。在您的属性文件中保留以下两行 -
    
    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 应用程序。
  • 执行程序过程

    右键单击项目名称,然后单击 Export > WAR File 创建一个战争文件。
    然后将此 WAR 部署到 Tomcat 的 webapps 目录中。
    最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp. 这将为您提供以下屏幕 -
    hello world Struts4
    输入值“Struts2”并提交页面。你应该看到下一页
    hello world Struts5
    请注意,您可以定义 index 作为 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.jc2182.struts2.HelloWorldAction" 
             method = "execute">
             <result name = "success">/HelloWorld.jsp</result>
          </action>
       </package>
    </struts>