Struts2 Hello World 範例


前面我們已經學習了Struts2 的架構,當點選一個超連結或提交一個HTML表單在Struts2 的 Web應用程式,輸入所收集被傳送到一個Java類稱為操作控制器。當動作執行後,結果選擇了一個資源來呈現響應。資源通常是一個JSP,但它也可以是一個PDF檔案,Excel電子試算表,或一個Java applet 視窗。

假設已經建立開發環境。現在讓我們繼續為第一個 “Hello World” 的 struts2 專案構建。這個專案的目的是建立一個Web應用程式,它收集使用者的姓名,並顯示“Hello World” 使用者名。我們將建立任何Struts2專案的四個組成部分:

SN 元件和說明
1 Action
Create an action class which will contain complete business logic and conrol the interaction between the user, the model, and the view.
2 Interceptors
Create interceptors if required, or use existing interceptors. This is part of Controller.
3 View
Create a JSPs to interact with the user to take input and to present the final messages.
4 Configuration Files
Create configuration files to couple the Action, View and Controllers. These files are struts.xml, web.xml, struts.properties.

我打算使用Eclipse IDE,所以所有必需的元件將建立一個動態Web專案下。所以,讓我們開始建立動態Web專案。

建立動態Web專案:

啟動Eclipse,然後再 File > New > Dynamic Web Project 輸入工程名稱為 HelloWorldStruts2 並設定螢幕中給出其餘的選項:

Hello World Sturts2

選擇在接下來的畫面中的所有預設選項和最後檢查 Generate Web.xml deployment descriptor 選項. 這將建立一個動態Web專案在Eclipse。現在去 Windows > Show View > Project Explorer, 會看到專案視窗的東西如下:

Hello World Sturts2

現在複製下列檔案從struts 2 lib 檔案夾 C:struts-2.2.3lib 到工程 WEB-INFlib 檔案夾,要做到這一點,你可以簡單地將以下的所有檔案拖放複製到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類是 Struts2 應用程式的關鍵,我們實現的大部分動作類中的業務邏輯。因此,讓我們建立一個Java檔案HelloWorldAction.java Java Resources > src 在下面給出的內容包名 com.yiibai.struts2 。

Action類響應使用者操作,當使用者點選一個URL。 Action類中的方法中的一個或多個被執行並返回一個字串結果。基於結果的值,一個特定的JSP頁面的呈現方式。

package com.yiibai.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”的執行方法。 

Struts2框架將建立一個物件HelloWorldAction類並呼叫執行方法在響應使用者的動作。把業務邏輯裡面的execute方法,最後返回的字串常數。簡單地說為每個網址,必須執行一個動作類,要麼就可以直接使用這個類的名稱作為操作名,也可以使用struts.xml檔案如下所示對映到一些其他的名字。

建立檢視

我們需要一個JSP提交最後的訊息,這個頁面會被稱為Struts2框架一個預定義的動作時,會發生這種對映將被定義在struts.xml檔案。因此,讓我們一起創造在Eclipse專案在WebContent檔案夾下面的jsp檔案helloWorld.jsp。要做到這一點,右鍵單擊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> 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類根據返回值的方法,將相應的檢視選擇和渲染作為響應。

組態檔案

我們需要一個對映,以配合網址,HelloWorldAction類(模型),和的helloWorld.jsp的(檢視)。對映講述了Struts 2框架類將響應使用者的操作(URL),這個類的方法將被執行,檢視渲染基於字串結果,該方法返回。

因此,讓我們建立一個名為struts.xml中。由於Struts2 要求struts.xml中存在類“檔案夾中。因此,建立struts.xml檔案的WebContent/ WEB-INF/classes檔案夾下。 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.yiibai.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

上面的組態檔案的幾句話。在這裡,我們設定為 true常數struts.devMode,因為我們正在程式開發環境,我們需要看到一些有用的紀錄檔訊息。然後,我們定義了一個名為HelloWorld 包。建立一個包是有用的,當想一起進行分組動作。在我們的例子中,我們將我們的行動命名為“hello”,這是相應的URL /hello.action 和備份HelloWorldAction.class。執行HelloWorldAction.class方法是執行時URL /hello.action 呼叫的方法。如果執行方法的結果返回“success”,然後我們把使用者到 helloWorld.jsp。

下一步是建立一個web.xml檔案,這是一個Struts2的任何請求的入口點。Struts2應用程式的入口點,將是一個部署描述符(web.xml)中定義的過濾器。因此,我們將定義在web.xml中條目oforg.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(即任何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,也是一個檔案處理器。處理程式的紀錄檔級別閾值可以設定使用 SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST 或 ALL.

就是這樣。我們已經準備好使用Struts 2框架來執行我們的Hello World應用程式。

執行應用程式

右鍵點選專案名稱,並單擊 Export > WAR File檔案建立一個WAR檔案。然後部署在Tomcat 的 webapps目錄下這個WAR。最後,啟動Tomcat 伺服器和嘗試存取URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給出以下畫面:

Hello World Input

輸入一個值“Struts2”,並提交頁面。應該看到頁面如下:

Hello World Result

注意,可以定義索引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.yiibai.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>