Struts2 Hello World示例

2022-07-08 11:31 更新

通過學習Struts2 框架可以了解到,當你在Struts2 的web應用程序里點擊一個超鏈接或提交一個HTML表單時,會由控制器收集輸入并發(fā)送一個叫Actions的Java類。Action被執(zhí)行后,Result會選擇一個資源給予響應。這個資源通常是一個JSP,也可以是一個PDF文件,一個Excel表格,或者是一個Java小程序窗口。

假設你已經(jīng)建好了你的開發(fā)環(huán)境,那么現(xiàn)在讓我們繼續(xù)構建第一個Struts2 項目:Hello World 。這個項目的目標是構建一個收集用戶名并在用戶名后跟隨顯示“Hello World”的web應用程序。我們需要為每個Struts2 項目構建以下四個組件:

序號名稱及描述
1Action(操作)
創(chuàng)建一個動作類,包含完整的業(yè)務邏輯并控制用戶、模型以及視圖間的交互。
2Interceptors(攔截器)
這是控制器的一部分,可依據(jù)需求創(chuàng)建攔截器,或使用現(xiàn)有的攔截器。
3View(視圖)
創(chuàng)建一個JSP與用戶進行交互,獲取輸入并呈現(xiàn)最終信息。
4Configuration Files(配置文件)
創(chuàng)建配置文件來連接動作、視圖以及控制器,這些文件分別是struts.xml、web.xml以及struts.properties。

我們?nèi)绻蛩闶褂肊clipse IDE,那么所有必需的組件都要在動態(tài)Web項目(Dynamic Web Project)下創(chuàng)建。因此我們就先從創(chuàng)建動態(tài)Web項目開始

創(chuàng)建一個動態(tài)Web項目:

啟動你的Eclipse,然后打開“File”>“New”>“Dynamic Web Project”,輸入“HelloWorldStruts2”的項目名稱,參照下圖設置其他選項:

按照下圖選擇所有默認選項,最后檢查 Generate Web.xml deployment descriptor 選項。這個將在Eclipse為你創(chuàng)建一個動態(tài)web項目?,F(xiàn)在點擊“Windows”>“Show”>“View”>“Project Explorer”,你就可以看到你的項目窗口,如下圖:

你好世界Sturts2
現(xiàn)在從Struts2 的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-x.y.z.GA
  • ognl-x.y.z.jar
  • struts2-core-x.y.z.jar
  • xwork-core.x.y.z.jar

創(chuàng)建Aciton類

Action類是Struts2 應用程序的關鍵,我們通過它實現(xiàn)大部分的業(yè)務邏輯。那么讓我們在“Java Resources”>“src”的類目下創(chuàng)建一個名稱為“HelloWorldAction.java”的java文件夾,使用一個命名為“cn.w3cschool.struts2”并包含以下內(nèi)容的資源包。
當用戶點擊一個URL時,由Action類來響應用戶操作。一個或多個Action類的方法被執(zhí)行,并返回一個字符串結果?;诮Y果的值,會呈現(xiàn)一個特定的JSP頁面。
package cn.w3cschool.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”字符串的執(zhí)行方法。
Struts2 框架將創(chuàng)建一個“HelloWorldAction”類的對象,并調(diào)用execute方法來響應用戶的動作。你把你的業(yè)務邏輯放進execute方法里,最后會返回字符串常量。簡單的描述每個URL,你需要實現(xiàn)一個Action類,你也可以用類名直接作為你的動作名,或者如下面內(nèi)容所示使用 struts.xml 文件映射到其他name上。

創(chuàng)建視圖

我們需要一個JSP來呈現(xiàn)最終的信息,當一個預定義動作發(fā)生時這個頁面將被Struts2 框架調(diào)用,并且這個映像會定義到 struts.xml 文件里。那么讓我們在你的Eclipse項目的WebContent文件夾里創(chuàng)建以下JSP文件 HelloWorld.jsp 。在project explorer中右鍵點擊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 標簽顯示Action類“name”屬性的值,這個值是使用HelloWorldAction類的 getName() 方法返回的。

創(chuàng)建主頁

在WebContent文件夾里,我們還需要創(chuàng)建 index.jsp 文件,這個文件是用作初始的action URL。用戶可以通過點擊它命令Struts2框架去調(diào)用HelloWorldAction類的定義方法并呈現(xiàn)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 action將通過struts.xml文件影射到HelloWorldAction類及其execute方法。當用戶點擊提交按鈕時,將使得Struts2框架運行HelloWorldAction類中的execute方法,并基于該方法的返回值,選擇一個適當?shù)囊晥D作為響應進行呈現(xiàn)。

配置文件

我們需要一個映像把URL、HelloWorldAction類(模型)以及 HelloWorld.jsp(視圖)聯(lián)系在一起。映像告知Struts2 框架哪個類將響應用戶的動作(URL),類里的哪個方法將要執(zhí)行,以及基于方法所返回的字符串結果,會呈現(xiàn)怎樣的視圖。
那么接下來讓我們創(chuàng)建一個名為 struts.xml 的文件。因為Struts2 要求 strust.xml 文件顯示在classes的文件夾里,所以我們要在WebContent/WEB-INF/classes 的文件夾下創(chuàng)建 struts.xml 文件。Eclipse并沒有默認創(chuàng)建“classes”文件夾,因此你需要自己創(chuàng)建。在project explorer里右鍵點擊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="cn.w3cschool.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>
這里說幾句關于上述的配置文件。這里我們設定常數(shù)struts.devMode的值為,因為我們是在開發(fā)環(huán)境下工作,需要查看一些有用的日志消息。然后,我們定義一個名為helloworld的數(shù)據(jù)包。當你想要把你的Actions集合在一起時,創(chuàng)建一個數(shù)據(jù)包是非常有用的。在我們的示例中,我們命名我們的動作為“hello”,與URL /hello.action保持一致,由HelloWorldAction.class進行備份。HelloWorldAction.classexecute方法就是當URL /hello.action被調(diào)用時運行。如果execute方法返回的結果為“success”,那么我們帶用戶進入HelloWorld.jsp
下一步是創(chuàng)建一個web.xml文件,這是一個適用于Struts2 任何請求的接入點。在部署描述符(web.xml)中,Struts2 應用程序的接入點將會定義為一個過濾器。因此我們將在web.xml里定義一個org.apache.struts2.dispatcher.FilterDispatcher 類的接入點,而web.xml文件需要在WebContent的WEB-INF文件夾下創(chuàng)建。Eclipse已經(jīng)創(chuàng)建了一個基礎的web.xml文件,你在創(chuàng)建項目的時候可以使用。那么,讓我們參照以下內(nèi)容做修改:
<?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作為我們的歡迎文件,那么我們已經(jīng)配置好了在所有的URL(列如:所有匹配/*模式的URL)上運行Struts2 過濾器。

注意:

如果它是struts2-core-2.5.jar,那么將web.xml中的過濾器類標記值更改為

<filter-class>

     org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

</filter-class>

如果它是struts2-core-2.1.3.jar,那么將web.xml中的過濾器類標記值更改為

<filter-class>

     org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

自Struts 2.1.3以來,F(xiàn)ilterDispatcher就不推薦使用了。如果您使用的是較舊的版本,則用戶高于解決方案。

如果它是struts2-core-2.3.X.jar,那么將web.xml中的過濾器類標記值更改為

<filter-class> 

     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

啟用詳細日志

通過在WEB-INF/classes文件夾下創(chuàng)建logging.properties文件,可以實現(xiàn)在使用Struts 2時啟用完整的日志記錄功能。 屬性文件中需保留以下兩行::
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
                              java.util.logging.ConsoleHandler

默認由logging.properties指定一個ConsoleHandler將日志記錄按指定路線發(fā)送給stdout和FileHandler。程序運行日志的級別閾值可以使用SEVERE,WARNING,INFO,CONFIG,F(xiàn)INE,F(xiàn)INER,F(xiàn)INEST或者ALL。

這樣,我們就準備好使用Struts 2運行我們的Hello World程序了。

執(zhí)行應用程序

右鍵點擊項目名稱,接著點擊“Export”>“WAR File”創(chuàng)建WAR文件,然后將WAR部署到Tomcat的webapps目錄中。最后,啟動Tomcat服務器并嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp ,將會呈現(xiàn)如下圖所示的結果:

你好世界Struts4

輸入一個“Struts2”值并提交頁面,你可以看到以下頁面

你好世界Struts5

注意,你可以在struts.xml文件中定義一個索引作為操作,這樣你可以調(diào)用索引頁面 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="cn.w3cschool.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號