學習筆記 Eclipse Struts2 Examples-HelloWorld

文章摘要
1、struts MVC模式
2、HelloWorld Struts2 工程配置
3、HelloWorld Struts2 工作原理


英文文獻請點擊此處~

簡介:

  • 1、當您單擊超鏈接或在Struts 2 Web應用程序中提交HTML表單時,輸入不會發(fā)送到另一個服務器頁面,而是發(fā)送到您提供的Java類,這些類稱為操作。
  • 2、Action觸發(fā)后,Result將選擇一個資源來呈現(xiàn)響應。
    資源通常是服務器頁面,但它也可以是PDF文件,Excel電子表格或Java小程序窗口。

假設您要創(chuàng)建一個簡單的“Hello World”示例,顯示歡迎消息。
在設置了一個空的基本的Struts 2 Web應用程序(參見學習筆記 Eclipse Struts2-創(chuàng)建web項目)后,要創(chuàng)建一個“Hello World”示例,您需要做四件事:

  • 1、創(chuàng)建一個類來存儲歡迎消息(模型)
  • 2、創(chuàng)建服務器頁面以顯示消息(視圖)
  • 3、創(chuàng)建一個Action類來控制用戶,模型和視圖(控制器)之間的交互
  • 4、創(chuàng)建一個映射(struts.xml)來耦合Action類和視圖

通過創(chuàng)建這些組件,我們將工作流程分為三個眾所周知的模式(MVC):視圖,模型和控制器。
解耦合的設計使得管理應用程序變得更加復雜時,編程更容易。

一、創(chuàng)建HelloWorld項目web工程

web工程

詳細工程文件展示:

IFEI:helloworld ifei$ tree
.
├── pom.xml
├── src
│   └── main
│       ├── java
│       │   └── wanghailu
│       │       └── apache
│       │           └── struts
│       │               ├── action
│       │               │   └── HelloWorldAction.java
│       │               └── model
│       │                   └── MessageStore.java
│       ├── resources
│       │   └── struts.xml
│       └── webapp
│           ├── HelloWorld.jsp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target
    ├── classes
    │   ├── struts.xml
    │   └── wanghailu
    │       └── apache
    │           └── struts
    │               ├── action
    │               │   └── HelloWorldAction.class
    │               └── model
    │                   └── MessageStore.class
    ├── m2e-wtp
    │   └── web-resources
    │       └── META-INF
    │           ├── MANIFEST.MF
    │           └── maven
    │               └── wanghailu.apache.struts
    │                   └── helloworld
    │                       ├── pom.properties
    │                       └── pom.xml
    ├── maven-status
    │   └── maven-compiler-plugin
    │       └── compile
    │           └── default-compile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    ├── test-classes
    └── tmp
        └── jsp
            └── org
                └── apache
                    └── jsp
                        ├── HelloWorld_jsp.java
                        └── index_jsp.java

34 directories, 17 files

二、創(chuàng)建模型類MessageStore.java

MessageStore.java

package wanghailu.apache.struts.model;

public class MessageStore {
    private String message;

    public MessageStore() {
        message = "Hello Struts User";
    }

    public String getMessage() {
        return message;
    }
}

注意使用public getter方法來允許訪問私有消息String屬性。Struts 2框架要求您要暴露給view(HelloWorld.jsp)的對象遵循JavaBean風格的約定。

三、創(chuàng)建Action類HelloWorldAction.java

我們需要一個Action類作為Controller。Action類響應用戶操作(在本示例中,該操作將單擊HTML超鏈接并將特定URL發(fā)送到Servlet容器)。Action類的一個或多個方法被執(zhí)行,返回一個String結果。根據(jù)結果??的值,HelloWorld.jsp渲染一個特定的視圖頁面(在此示例中為該視圖頁面)。

package wanghailu.apache.struts.action;

import wanghailu.apache.struts.model.MessageStore;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
    private MessageStore messageStore;

    public String execute() {
        messageStore = new MessageStore() ;
        
        return SUCCESS;
    }

    public MessageStore getMessageStore() {
        return messageStore;
    }
}

Struts 2框架將創(chuàng)建一個HelloWorldAction類的對象并調用execute方法以響應用戶的操作(單擊發(fā)送特定URL到Servlet容器的超鏈接)。

在這個例子中,execute方法創(chuàng)建一個類的對象,MessageStore然后返回String常量SUCCESS。

還要注意私有MessageStore對象的public getter方法。由于我們希望使該MessageStore對象可用于視圖頁面,因此HelloWorld.jsp我們需要遵循JavaBean樣式,在需要時提供getter和setter方法。

四、創(chuàng)建查看HelloWorld.jsp

我們需要一個服務器頁面來呈現(xiàn)存儲在模型類中的消息MessageStore。在src/main/webapp文件夾中創(chuàng)建下面的JSP 。
HelloWorld.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h2><s:property value="messageStore.message" /></h2>
  </body>
</html>

taglib指令告訴Servlet容器,該頁面將使用Struts 2標簽,并且這些標簽前面會有一個s。

該<s:property> 標簽顯示通過調用方法返回的值getMessageStore 的的HelloWorldAction 控制器類。該方法返回一個MessageStore 對象。通過添加.message 到值屬性的messageStore部分,我們告訴Struts 2框架來調用該 對象的getMessage 方法MessageStore。getMessage 類的方法MessageStore返回一個String。它是由<s:property> 標簽顯示的String 。

五、在struts.xml中添加Struts配置

我們需要一個映射來將URL,HelloWorldAction 類(控制器)和HelloWorld.jsp (視圖)綁定在一起。映射告訴Struts 2框架,哪個類將響應用戶的操作(URL),該類的哪個方法將被執(zhí)行,以及根據(jù)該方法返回的String結果渲染的視圖。

編輯struts.xml文件(在該文件在src / main / resources文件夾中的Mvn項目中)以添加操作映射。將操作節(jié)點(動作名稱=“hello”)放在打開和關閉包節(jié)點之間,緊跟在名稱=“index”的動作映射之后。你的完整struts.xml應該是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <constant name="struts.devMode" value="true" />

    <package name="basicstruts" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
        <action name="hello" class="wanghailu.apache.struts.action.HelloWorldAction" method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>
    </package>

</struts>

六、創(chuàng)建URL操作

讓我們在里面添加一個Action URL index.jsp(見src/main/webapp文件夾),這樣用戶可以點擊鏈接來告訴Struts 2框架來運行HelloWorldAction該類的execute方法并渲染HelloWorld.jsp視圖。

首先在jsp的頂部添加taglib指令<%@ taglib prefix="s" uri="/struts-tags" %>。接下來<p><a href="<s:url action='hello'/>">Hello World</a></p>在h1標簽之后添加這個p 標簽。你的新的index.jsp應該是:

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Basic Struts 2 Application - Welcome</title>
    </head>
    <body>
        <h1>Welcome To Struts 2!</h1>
        <p><a href="<s:url action='hello'/>">Hello World</a></p>
    </body>
</html>

Struts url標簽創(chuàng)建一個帶有hello操作的URL。hello操作被映射到HelloWorldAction類及其execute方法。當用戶點擊上述URL時,會導致Struts 2框架運行HelloWorldAction該類的execute方法。之后,該方法返回String success(常量SUCCESS),HelloWorld.jsp將會渲染視圖頁面。

七、構建WAR文件并運行應用程序

通過mvn jetty:run來執(zhí)行程序,需要配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>


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

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

可以通過http://localhost:8080/helloworld/index.action來訪問網(wǎng)絡程序,效果如下:

點擊“Hello World”鏈接,展示如下:

八、工作原理

您的瀏覽器向Web服務器發(fā)送請求URL:http://localhost:8080/helloworld/hello.action.

  • 1、容器從Web服務器接收對資源的請求hello.action。
    根據(jù)從web.xml加載的設置,容器發(fā)現(xiàn)所有請求都被路由org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,包括*.action請求。StrutsPrepareAndExecuteFilter是框架的入口點。
  • 2、該框架查找名為“hello”的動作映射,并發(fā)現(xiàn)該映射對應于類“HelloWorldAction”。框架實例化Action并調用Action的execute方法。
  • 3、該execute方法創(chuàng)建MessageStore對象并返回SUCCESS(= "success")。框架檢查操作映射以查看要SUCCESS返回哪個頁面要加載。該框架告訴容器作為對請求(資源)的響應進行呈現(xiàn)HelloWorld.jsp。
  • 4、當頁面HelloWorld.jsp被處理時,<s:property value="messageStore.message" />標簽調用Action 的getter getMessageStore,HelloWorld然后調用getMessage返回的MessageStore對象getMessageStore。標簽將message屬性的值合并到響應中。
  • 5、純HTML頁面響應發(fā)送回瀏覽器。

備注:

該框架使用Actions來處理HTML表單和其他請求。本Action類返回一個結果,名稱,例如SUCCESS,ERROR或INPUT。根據(jù)從中加載的映射struts.xml,給定的結果名稱可以選擇一個頁面(如本示例),另一個操作或其他一些Web資源(圖像,PDF)。

當服務器頁面呈現(xiàn)時,通常它將包括由Action提供的動態(tài)數(shù)據(jù)。為了方便顯示動態(tài)數(shù)據(jù),框架提供了一組可與HTML標記一起使用以創(chuàng)建服務器頁面的標簽。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容