1. 程式人生 > >Struts2之struts-2.3.20開發環境的搭建並實現第一個Hello World小應用

Struts2之struts-2.3.20開發環境的搭建並實現第一個Hello World小應用

搭建Struts2的開發環境,一般要做以下三個步驟:

1.找到開發Struts2應用需要使用到的jar檔案,接下來介紹如何在網上下載Struts所需要的工具並找到開發Struts應用的jar檔案:

(1).首先,在百度中搜索Struts2,然後開啟下圖的紅色箭頭指向處(也可以直接點選下面的網址訪問:Struts網址

(2).開啟之後,出現下圖的介面,點選下載按鈕:

(3).選擇下面圈起來的第一個zip包,下載即可:

(4).下載之後解壓到一個資料夾裡面,我下載之後裡面的檔案有:

(5).我們所需要的jar包就在lib那個資料夾下,不同應用需要的jar包是不同的,因為我們所下載的Struts包是Struts-2.3.20版本的,所以開發Struts2程式最少需要的jar包有以下10個,分別是:

struts2-core-2.x.x.jar : Struts 2框架的核心類庫。

xwork-core-2.x.x.jar: XWork類庫,Struts 2在其上建立。

ognl-3.x.x.jar: 物件圖導航語言(Object Graph Navigation Language),Struts 2框架通過其讀寫物件的屬性。

freemarker-2.3.x.jar: Struts 2的UI標籤的模板使用FreeMarker編寫。

commons-logging-1.1.x.jar: ASF出品的日誌包,Struts 2框架使用這個日誌包來支援Log4J和JDK1.4+的日誌記錄。

commons-fileupload-1.3.1.jar: 檔案上傳元件,2.1.6版本後必須加入此檔案。

commons-io-2.2.jar:裡面有很多io(輸入輸出)操作工具類,是java.io.*的擴充套件,IO資料流讀取功能。

commons-lang-2.4.jar:是json中的jar包,包含了一些資料型別工具,是java.lang.*的擴充套件。

commons-lang3-3.2.jar:帶有常用的語言處理類的方法。

javassist-3.11.0.GA.jar:javassist(Java程式設計助手)用來操作位元組碼的,是位元組碼操縱簡單。這個jar包是一個編輯Java位元組碼的類庫。

以上這些包都可以在lib資料夾中找到,這是Struts-2.3.20版本所必需的,要不然會報異常

(6).接下來我們開啟MyEclipse工具,新建一個Web Project:

點選完成後開啟專案底下的WebRoot目錄下的WEB-INF,下面有個lib資料夾,把上面所需要的10個jar包找到,放入lib目錄底下:

這樣就完成了第一步驟,把開發Struts2應用所需要的jar包放入Web工程中。

注:如果你所下載的Struts工具的版本較低的話,有一些jar包是不需要的,這裡僅供大家作為參考。

2.接下來就是編寫Struts2的配置檔案:

在專案下的src目錄下新建一個struts.xml檔案,接下來附上struts.xml的模板:

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>

</struts>

就可以在<struts>和</struts>標記之間寫一些其它的東西了。


3.在專案底下的WebRoot目錄下的WEB-INF下的web.xml檔案中加入Struts2 MVC框架啟動配置:

這裡,只需要在web.xml檔案中加入這一段程式碼:

<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

加在哪裡呢,所以我附上web.xml檔案:

web.xml檔案:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name></display-name>

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

這樣就算配置好了,接下來測試一下開發環境搭建是否成功,點選這個專案,單擊滑鼠右鍵,在點選Run as <- 3 MyEclipse Server Application,出現下圖,點選OK即可:

 

 
然後檢視控制檯,看是否會報錯,如果報錯可能上面3步中有步驟沒做好,看到控制檯沒報錯,該專案完成即可:


這裡只截2幅圖了,這樣就搭建好了Struts2的開發環境。

4.接下來將實現第一個Struts2應用,這個應用是在前面StrutsTest專案搭建好開發環境後接下來寫的:

(1).首先,開啟struts.xml檔案,在<struts>和</struts>標記之間寫一段程式碼:

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>
	<package name="xg" namespace="/test" extends="struts-default">
		<action name="helloworld" class="tom.xg.action.HelloWorldAction"
			method="execute">
			<result name="hello">/WEB-INF/page/hello.jsp</result>
		</action>
	</package>
</struts>

在Struts2框架中使用包來管理Action,包的作用和java中的類包是非常類似的,它主要用於管理一組業務功能相關的action。在實際作用中,我們應該把一組業務功能相關的Action放在同一個包下。

其中配置包時,必須指定name屬性,該name屬性值可以任意取名,但必須是唯一的,它不對應java的類包,如果其他包要繼承該包,必須通過該屬性進行引用,包的namespace屬性用於定義該包的名稱空間,名稱空間作為訪問該包下Action的路徑的一部分,如訪問上面例子的Action,訪問路徑為:/test/helloworld.action,如果不指定該屬性,預設是""(空字串)。

通常每個包都要繼承struts-default包,因為Struts2很多核心的功能是由攔截器來實現的,如:從請求中把請求引數封裝到action,檔案上傳和資料校驗等等都是通過攔截器來實現的,struts-default定義了這些攔截器和Result型別。當包繼承了struts-default才能使用struts2提供的核心功能,包還可以通過abstract="true"定義為抽象包,抽象包不能包含action。

action中的name屬性指的是action的名稱,可以作為訪問action路徑的一部分,class屬性是定義一個action類,當請求到來之後,交給這個action類處理,上面的例子說明要建立一個HelloWorldAction類並且在tom.xg.action類包下,method屬性指的是該action的方法,如上面程式碼中的execute方法必須定義在HelloWorldAction類中。

result那個標記主要用來定義檢視,name屬性是檢視的名稱,上面的程式碼說明hello.jsp頁面的路徑必須在WEB-INF目錄底下的page資料夾下。

(2).第二步,把那個包下的action新建出來,類名為HelloWorldAction,該類放在src目錄下的tom.xg.action包下,並定義一個execute方法,其中程式碼如下:

HelloWorldAction.java檔案:

package tom.xg.action;

public class HelloWorldAction {
	private String msg;//定義一個字串變數,放置記憶體中,用來儲存你所想要顯示在檢視上的資訊
	
	public String getMessge(){//封裝字串變數
		return msg;
	}
	
	public String execute(){	//execute方法,其中返回型別一定要是String型別,這是struts2的action方法的簽名格式,要求必須是String型別
		msg="我的第一個Struts2應用,Hello World!";//為該變數負責,通過execute方法,顯示到hello.jsp頁面上
		return "hello";	//處理完使用者的請求後,希望回到什麼檢視,就填檢視的名稱,這裡返回到的是struts.xml檔案裡的result標記的name屬性
	}
}

(3).第三步,在struts.xml檔案上要求檢視的路徑為/WEB-INF/page/hello.jsp,所以我們在專案下WebRoot目錄下的WEB-INF下新建一個page資料夾,在page資料夾裡新建一個hello.jsp頁面:

hello.jsp檔案的程式碼:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'hello.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <!-- 輸出顯示HelloWorldAction類所封裝的變數,因為是getMessage()方法,所以就是${message },如果在HelloWorldAction類裡封裝變數的方法為getResult,程式碼應該寫為${result }-->
    ${messge }
  </body>
</html>

(4).第四步,重新部署StrutsTest專案,開啟Tomcat 7.0伺服器,再輸入網址 http://localhost:8083/Struts2Test/test/helloworld,其中這網址的前面幾個不用我說了,後面的/test/helloworld是根據struts.xml檔案中包的名稱空間namespace屬性的值和包下的action的名稱name屬性值來訪問的,如果改了的話,訪問路徑也要改的,最後,執行效果如下圖所示:

最後,再附上該專案的目錄結構:

5.以上內容僅供大家學習參考,寫得不好請見諒,如要轉載,請註明出處,如有雷同,純屬巧合,如有錯誤,請指出,謝謝!