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.zaixian.struts2 。

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

package com.zaixian.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.zaixian.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.zaixian.struts2.HelloWorldAction"
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>

上一篇: Struts2 體系結構 下一篇: Struts2快速入門