當前位置:首頁 » struts2教學 » Struts2入門-Hello Word實例

Struts2入門-Hello Word實例

Struts2入門-Hello Word實例-這個項目的目的是建立一個Web應用程序,收集用戶的姓名,並顯示“Hello World”,後麵的用戶名。

從上一節中學到了Struts 2的架構,當你點擊一個超鏈接或提交一個Struts2的Web應用程序的HTML表單中,輸入被發送到一個Java類操作的控製器,收集。執行該操作後,結果選擇了一個資源來呈現的響應。資源通常是一個JSP,但它也可以是一個PDF文件,Excel電子表格,或Java小應用程序窗口。

假設你已經建立開發環境。現在,讓我們繼續建立我們的第一個Hello World struts2項目。這個項目的目的是建立一個Web應用程序,收集用戶的姓名,並顯示“Hello World”,後麵的用戶名。我們將創建任何Struts2項目的四個組成部分:

SN 組件 & 描述
1 Action
創建一個Action類,其中將包含完整的業務邏輯和控製的用戶,模型和視圖之間的相互作用。
2 Interceptors
如果需要創建攔截器,或使用現有的攔截器。這是控製器的一部分。
3 View
創建一個JSP來與用戶交互的輸入和提交最後的消息。
4 Configuration Files
創建配置文件的動作,視圖和控製器。這些文件是struts.xml中,web.xml中,struts.properties。

我要使用Eclipse IDE,所以下創建一個動態Web項目所需的所有組件。因此,讓我們開始創建動態Web項目。

創建一個動態網頁項目:

打開eclipse然後找 File > New > Dynamic Web Project 輸入項目名稱為:HelloWorldStruts2  在下麵的屏幕中給出的選項,並設置其餘部分:

選擇在屏幕上的所有默認選項,最後打勾 Generate Web.xml deployment descriptor 選項. 這將創建一個動態Web項目在Eclipse中。

然後轉到 Windows > Show View > Project Explorer, 你會看到你的項目窗口中的東西如下:


現在從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 Class):

Action類是Struts 2的應用程序的關鍵,我們實現了大部分的Action類中的業務邏輯。因此,讓我們創建一個的java文件HelloWorldAction.java下Java Resources > src 使用一個包名 com.tutorialspoint.struts2 用下麵給出的內容.

Action類來響應用戶的操作,當用戶點擊一個URL。 Action類中的一個或多個方法被執行,並返回一個字符串結果。基於結果的值,一個特定的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”屬性。我們有標準的“名稱”屬性的getter和setter方法,返回字符串“成功”的執行方法。

Struts2框架的HelloWorldAction類將創建一個對象並調用execute方法在響應用戶的操作。把業務邏輯裡麵的execute方法,並最終返回的字符串常量。簡單地說,為每個URL你必須執行一個動作類,或者可以直接使用這個類的名稱作為操作名,也可以映射到一些其他的名稱使用struts.xml文件,如下圖所示。

創建視圖(View)

我們需要一個JSP提交最後的消息,這個頁麵會被稱為Struts 2框架中預定義的動作時,會發生此映射將在struts.xml文件中定義的。因此,讓我們創建下麵的JSP文件 HelloWorld.jsp在WebContent文件夾在Eclipse項目中. 要做到這一點,右鍵單擊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容器中,這個頁麵將使用Struts2標簽,這些標簽之前,將通過s。 s:property標簽顯示動作類‘name’的屬性值,是調用HelloWorldAction 類的方法getName()

創建一個主頁麵:

我們還需要在WebContent文件夾中創建index.jsp頁麵文件。該文件將作為初始動作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動作作定義在上麵的視圖文件將被映射到HelloWorldAction類和它的執行方法使用struts.xml文件。當用戶點擊“提交”按鈕,它會導致Struts2框架運行的執行方法定義在其中,HelloWorldAction類和方法的返回值的基礎上,將相應的視圖選擇和呈現的一個響應。

配置文件

我們需要一個映射,以配合URL,HelloWorldAction類(模型),HelloWorld.jsp(視圖)。映射告訴Struts 2框架的類將響應用戶的操作(URL),這一類的方法將被執行,什麼視圖來顯示字符串結果的基礎上,該方法返回。

讓我創建一個文件為: struts.xml. 由於Struts 2的要求struts.xml存在的類文件夾中。 因此創建struts.xml在 WebContent/WEB-INF/classes 目錄中. 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被調用. 如果execute方法返回"success", 然後我們把用戶引到HelloWorld.jsp.

下一步是創建一個web.xml文件這是任何請求發送到Struts2的一個切入點。Struts2的應用程序的入口點,將是一個部署描述符(web.xml)中定義的過濾器。

在web.xm文件中,我們定義一個過濾器org.apache.struts2.dispatcher.FilterDispatcher. web.xml文件需要創建WEB-INF文件夾下的WebContent。 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 (i.e, any url that match the pattern /*)

啟用詳細的日誌:

您可以啟用完整的日誌記錄功能,通過創建工作和Struts2同時創建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。
就是這樣。我們已經準備好來運行我們的Hello World應用程序使用Struts 2框架。

執行應用程序

右鍵點擊項目名稱,然後單擊“Export > WAR File 創建一個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>