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 並設置屏幕中給出其餘的選項:
選擇在接下來的畫面中的所有默認選項和最後檢查 Generate Web.xml deployment descriptor 選項. 這將創建一個動態Web項目在Eclipse。現在去 Windows > Show View > Project Explorer, 會看到項目窗口的東西如下:
現在複製下列文件從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-language-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" %>
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"%>
Hello World From Struts2
<form action="hello"> <label for="name">Please enter your name<input type="text" name="name"/> <input type="submit" value="Say Hello"/>
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中應該像這樣:
上面的配置文件的幾句話。在這裏,我們設置爲 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文件時爲創建項目。所以,讓我們只需要修改如下:
<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">
我們已經指定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。這會給出以下畫面:
輸入一個值「Struts2」,並提交頁面。應該看到頁面如下:
注意,可以定義索引struts.xml文件中的動作,在這種情況下,可以調用索引頁http://localhost:8080/HelloWorldStruts2/index.action。下面檢查如何定義指數作爲一個動作: