從上一節中學到了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中。
現在從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.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文件,如下圖所示。
我們需要一個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>