日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts 2基础入门

發布時間:2024/1/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts 2基础入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習內容

?Struts 2的優勢

?Strust 2體系結構

?Struts 2運行流程

能力目標

?熟悉Struts 2的體系結構和運行流程

?熟練使用MyEclipse進行Struts 2開發?

本章簡介

前四章我們學習了Struts 1的相關知識,包括Struts 1體系結構、運行流程、標簽庫等。Struts 1雖然是經典的MVC框架,但是其自身具有某些天生的設計缺陷,例如:與Servlet API耦合嚴重、難以測試、侵入式設計等等,為了彌補這些缺陷,Struts 2框架應運而生。

Struts 2并不單單是Struts 1的版本升級,它與Struts 1在體系上差別很大,它使用的是WebWork的核心,而非Struts 1的設計核心。

本章將學習Struts 2基礎知識,包括Struts 2體系結構、運行流程等,并且我們會使用Struts 2重構第一章的登錄案例,以此來介紹使用MyEclipse進行Struts 2開發的步驟。

核心技能部分

3.1?Struts 2的優勢

Struts1是一個經典、成熟的MVC框架,不管是穩定性還是可靠性都得到了廣泛的證明。擁有豐富的開發人群,幾乎成為了事實上的工業標準。但是隨著時間的流逝,技術的進步,Struts1的局限性也越來越多地暴露出來,并且制約了Struts1的繼續發展。

?Struts 1與Servlet API耦合嚴重,測試困難

Struts 1是在Model2基礎上發展起來的,基于Servlet API,所以在Struts 1的業務邏輯控制器內充滿的Servlet API,例如下面的代碼:

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response){

// . . .

}

HttpServletRequest和HttpServletResponse就屬于Servlet API中的類,而Servlet API通常是由Web服務器來負責實例化的,所以Struts 1嚴重依賴Web服務器,一旦脫離了Web服務器,Action就會出現問題。

?Struts 1屬于侵入式設計

Struts 1的業務邏輯控制器必須繼承基類Action,并且包含了大量的Struts 1 API,例如上述代碼中的ActionMapping和ActionForm類。這種侵入式的設計嚴重影響了代碼重用,一旦系統需要重構,這種侵入式的設計將會帶來很多的問題。

Struts 2并不單單是Struts 1的版本升級,它與Struts 1在體系上差別很大,有了許多革命性的改進。它使用的是WebWork的核心,而非Struts 1的設計核心,接下來簡單介紹一下WebWork。

WebWork來自于一個非常優秀的開源組織:opensymphony,它和Struts 1一樣也是諸多MVC開源框架中的一員。WebWork項目在2002年3月發布,它對Struts式的框架進行了革命性改進,相對于Struts 1的那些缺陷和局限性,WebWork則更加優秀。

WebWork采用了一種松耦合設計,使得Action不再與Servlet API和WebWork耦合。WebWork的Action更像一個普通的Java對象,這種設計大大提高了代碼重用率,降低了應用復雜度。

目前,Struts已經分化成兩個框架,其中一個是Shale,它是一個全新的框架,與Struts關聯很少,本書不作介紹。另一個就是Struts 1和WebWork結合后的Struts 2。?

3.2?Struts 2體系結構

Struts 2整合了WebWork和Struts 1的優點,是一個優雅的、擴展性強的框架,它的體系結構如圖3.1.1所示。

?

圖3.1.1 Struts 2體系結構

上圖清晰的顯示了Struts 2體系結構中的組件和運行流程,下面我們先介紹這些組件。

(1)?FilterDispatcher是Struts 2中最重要的一個類,它相當于Struts 1中的核心控制器ActionServlet。該類其實是一個過濾器,在web.xml文件中進行配置,負責攔截客戶端請求。

(2)?Action映射器即ActionMapper,它是客戶端請求和Action調用請求之間的映射,可以解除Action對于Servlet API的依賴。ActionMapper會根據客戶端請求的URI來查找是否存在對應的Action,如果有就返回一個包含了Action映射信息的數據傳輸對象ActionMapping;如果沒有就返回null。

(3)?Action代理即ActionProxy,它是Action的代理,主要作用是如何取得Action并創建ActionInvocation對象。

(4)?ActionInvocation就是Action的調用者,它在Action的執行過程中,負責Interceptor(攔截器)、Action和Result等一系列組件的調度。

(5)?攔截器即Interceptor,它是Struts 2的重要特性,Struts 2框架的大多數功能都是通過攔截器實現的。攔截器圍繞著Action和Result的執行而執行,攔截器的方法會在Action執行之前或執行之后自動執行,這種方式可以把通用的操作動態的插入到Action執行的前后,非常有利于系統解耦。

(6)?Action即業務邏輯控制器,跟Struts 1中的Action所起的作用相似。

(7)?Result即結果視圖,主要作用是在Action調用結束后調度視圖,并決定視圖以哪種形式在客戶端瀏覽器展現。

(8)?配置管理器即ConfigurationManager,它負責讀取并解析Struts 2的配置文件struts.xml。

上述這些組件會在后續章節中陸續進行詳細介紹。下面我們看一下一個HTTP請求在Struts 2框架中的處理流程。

(1)?客戶端發送一個HTTP請求到服務器端

(2)?FilterDispatcher攔截該請求并詢問ActionMapper來決定是否需要調用哪個Action

(3)?FilterDispatcher把控制器委派給ActionProxy,ActionProxy會調用配置管理器從

????struts.xml文件中讀取配置信息,然后創建ActionInvocation的實例對象

(4)?ActionInvocation的實例對象調用Action并執行Action前后的攔截器

(5)?一旦Action執行完畢,ActionInvocation的實例對象會根據struts.xml中的配置找到

應的結果視圖來呈現頁面

(6)?攔截器會再次被執行,順序與執行Action時的順序相反,然后視圖會返回給

FilterDispatcher并呈現在客戶端瀏覽器中

3.3?使用Struts 2重構登錄案例

在使用Struts 2進行Web開發之前,我們需要從其官方網站(http://struts.apache.org/)上獲取Struts 2,目前最新版本是2.2.3。本書中的案例使用的版本是2.2.1,圖3.1.2是該版本解壓后的資源文件。

?

圖3.1.2 Struts2資源包

?apps文件夾中包含了官方提供的Struts 2示例,可供開發者學習參考

?docs文件夾中是官方提供的Struts 2文檔

?lib文件夾中是Struts 2的Jar包

?src文件夾中是Struts 2的源代碼

示例3.1

下面我們使用Struts 2重構本書第一章的登錄案例,以此來介紹使用MyEclipse進行Struts 2開發的基本步驟,并進一步理解Struts 2的體系結構和運行流程。

(1)?在MyEclipse中創建Web工程,然后右鍵單擊工程名添加Struts支持,如圖3.1.3所示。

?

圖3.1.3 添加Struts支持

(2)?在上圖中依次單擊【MyEclipse】【Add Struts Capabilities…】后打開如圖3.1.4所示的對話框。

?

圖3.1.4 配置Struts 2

圖中①處用來選擇Struts的版本,圖中②處用來設置Struts 2過濾器(FilterDispatcher)的名字,圖中③處用來設置攔截哪種客戶端請求,選擇“/*”表示攔截所有客戶端請求。設置結束后單擊【Finish】按鈕打開如圖3.1.5所示的對話框。

?

圖3.1.5 添加Struts 2類庫

上圖列出了跟Struts 2相關的所有類庫,這里我們只需要選中Struts 2 Core Libraries即可,單擊【Finish】按鈕結束操作。圖3.1.6是創建好的Struts 2項目結構。

?

圖3.1.6 項目結構

在上圖的項目中,我們可以看到Struts 2的類庫和自動生成的配置文件struts.xml。圖3.1.7是web.xml配置文件的代碼。

?

圖3.1.7 web.xml配置文件

web.xml中主要配置了Struts 2的過濾器,對應圖3.1.4中的設置,并且代碼由MyEclipse自動生成。這里需要注意的是:Struts 2不同版本的核心控制器是不同的,2.0.x版本的核心控制器是我們上面提到的FilterDispatcher;而2.1之后的版本普遍采用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter作為核心控制器。

web.xml默認從WEB-INF/classes路徑下加載struts.xml配置文件,如果工程中的Struts配置文件不在默認路徑下或者名字不是struts.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"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>config</param-name><param-value>../struts-config.xml</param-value></init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping> </web-app>

我們使用<init-param>元素配置Struts配置文件,上述代碼中的“../”表示從默認路徑后退一級到WEB-INF文件夾中,struts-config.xml是自定義的Struts配置文件名。

(3)?創建實體類Admin.java、實現數據庫連接和關閉的工廠類DaoFactory.java以及使用JDBC實現登錄功能的Dao類AdminDao.java,這些類和第一章的一樣,此處不在多述。

(4)?創建業務邏輯控制器AdminAction,代碼如下所示。

import com.opensymphony.xwork2.ActionSupport; public class AdminAction extends ActionSupport { private int id; private String name; private String pwd; public String execute() { AdminDao ad=new AdminDao(); if(ad.checkLogin(name, pwd)) return SUCCESS; else return ERROR; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }

Struts 2的Action可以不用繼承任何類和實現任何接口,但是為了以后使用方便或增強功能,通常繼承com.opensymphony.xwork2.ActionSupport類,此類實現了很多有用的接口,提供了國際化、驗證等很多實用功能。Struts 2中無需創建ActionForm,表單中的數據由Action進行封裝,所以在上述代碼中,出現了與表單對應的屬性和getter/setter方法。

(5)?創建登錄視圖login.jsp,代碼如下所示。

<body><form action="login.action" method="post"><table width="397" height="169" border="0" align="center"><tr><td colspan="2" align="center">管理員登錄</td></tr><tr><td width="163" align="right">登錄名稱:</td><td width="218"><input name="name" type="text" class="txt"></td></tr><tr><td align="right">登錄密碼:</td><td><input name="pwd" type="password" class="txt"></td></tr><tr><td colspan="2" align="center"><input type="submit" value="提交"></td></tr></table></form> </body> 該頁面主要包含了一個表單,需要注意的是:表單元素name屬性的值必須與前面AdminAction類中的屬性一致。 (6) 創建登錄成功后顯示的視圖頁面index.jsp和登錄失敗后顯示的視圖頁面fail.jsp,代碼如下所示。 index.jsp<body><center>登錄成功</center></body> fail.jsp<body><center>登錄失敗,請重試!</center></body> (7) 打開struts.xml文件進行配置,代碼如下所示。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="default" extends="struts-default"> <action name="login" class="com.zy.AdminAction"> <result name="success" type="dispatcher">/index.jsp</result> <result name="error" type="redirect">/fail.jsp</result> </action> </package> </struts>

Struts 2的配置文件引入了“包機制”,通過“包(package”來管理一個業務邏輯處理單元。package元素的name屬性用來設置包名,extends屬性類似于Java中的繼承,用來繼承指定的已存在的包,Struts 2框架的默認包是“struts-default”。

<action>元素用來配置業務邏輯控制器,name屬性是必須的,與form表單的action屬性的值一致。

<result>元素用來配置Action處理結束后要跳轉到哪個視圖頁面,name屬性表示result的邏輯名,必須與Action返回的字符串匹配;type屬性表示結果類型,常用的結果類型見表3-1-1所示。

表3-1-1 type屬性

結果類型

描述

redirect

????重定向,請求將丟失

dispatcher

????轉發請求

?

提示

本案例中的業務邏輯控制是AdminAction類,該類的execute方法返回的SUCCESS和ERROR不是我們自定義的字符串,它們來自于Struts 2的Action接口(ActionSupport類實現了Action接口)。此處我們可以自定義返回字符串,只要跟struts.xml配置文件中result元素的name屬性值匹配即可。

(8)?部署并運行該案例,打開登錄頁面,效果如圖3.1.8所示。

?

圖3.1.8 登錄頁面

登錄成功后跳轉到index.jsp,效果如圖3.1.9所示。

?

圖3.1.9 登錄成功

登錄失敗后跳轉到fail.jsp,效果如圖3.1.10所示。

?

圖3.1.10 登錄失敗

至此,我們已經完成了使用Struts 2重構登錄案例的任務。下面我們總結一下登錄案例在Struts 2中的運行流程。

(1)?用戶通過瀏覽器訪問登錄頁面,如圖3.1.8所示。

(2)?輸入登錄名稱和密碼后單擊【提交】按鈕向服務器發送請求“login.action”。

(3)?客戶端請求被Struts 2的核心控制器攔截,本案例中是StrutsPrepareAndExecuteFilter。

(4)?核心控制器在經過ActionMapper的確認后將控制器委派給ActionProxy,ActionProxy

調用配置管理器讀取struts.xml文件并創建ActionInvocation對象。

(5)?ActionInvocation對象調用AdminAction并執行其中的execute方法,然后根據返回的字

符串查找對應的結果視圖。登錄成功返回SUCCESS并跳轉到index.jsp視圖頁面;登錄

失敗返回ERROR并跳轉到fail.jsp視圖頁面。

(6)?相應的視圖頁面被返回給核心控制器并呈現在客戶端瀏覽器中。

3.4?Struts 2訪問Servlet API

前面我們講過Struts 2的優勢之一就是大大降低了與Servlet API之間的耦合度,因為Struts 2的Action可以直接封裝和傳遞數據,并且無需繼承任何類和實現任何接口。但在某些情況下,我們需要在Action中訪問Servlet API的對象,例如登錄成功后需要把用戶信息保存到session會話中。

Struts 2提供了多種訪問Servlet API的方式,最常用兩種是:解耦訪問方式和耦合訪問方式。

3.4.1?與Servlet API的解耦訪問方式

為了避免與Servlet API耦合在一起,Struts 2對Servlet API中的HttpServletRequest、HttpSession和ServletContext對象進行了進一步的封裝,并使用三個Map對象來進行替代。

Struts 2提供了com.opensymphony.xwork2.ActionContext類來獲取這些Map對象,該類是Action執行的上下文,通過該類可以在Action中直接訪問對應HttpServletRequest、HttpSession和ServletContext的Map對象。下面是ActionContext類的常用方法。

?public ?Object ?get(String key);該方法用來獲得HttpServletRequest對象,使用的時候傳遞一個“request”字符串即可。

ActionContext ac = ActionContext.getContext(); Map request = (Map)ac.get(“request”); ? Map<String, Object> getSession();該方法用來獲得對應HttpSession的Map對象。 ActionContext ac = ActionContext.getContext(); Map session = ac.getSession(); ? Map<String, Object> getApplication();該方法用來獲得對應ServletContext的Map對象。 ActionContext ac = ActionContext.getContext(); Map application = ac.getApplication();

示例5.2

下面我們完善登錄案例,登錄成功后保存用戶信息到session會話中,并在主頁面顯示出來。

修改Action的execute方法,代碼如下所示。

public String execute() { AdminDao ad=new AdminDao(); if(ad.checkLogin(name, pwd)) {//創建ActionContext對象 ActionContext ac=ActionContext.getContext();//創建對應HttpSession的Map對象 Map session=ac.getSession();//保存用戶信息 session.put("logname", name); return SUCCESS; } else return ERROR; }

由于現在尚未學習Struts 2標簽庫,所以在頁面中我們仍然使用Java小腳本來讀取session中的信息。

??

<body><%String logname=(String)session.getAttribute("logname"); %><center>恭喜<%=logname %>,登錄成功</center></body>

圖3.1.11是登錄成功后的運行效果。

?

圖3.1.11 登錄成功

3.4.2?與Servlet API的耦合訪問方式

Struts 2雖然不推薦與Servlet API的耦合訪問方式,但是考慮到某些特殊情況下可能需要直接訪問Servlet API,所以Struts 2提供了直接訪問Servlet API的方式。

我們可以使用Struts 2中的org.apache.struts2.ServletActionContext類直接獲得Servlet API中的對象,該類是ActionContext的子類,表3-1-2列出了該類的常用方法。

表3-1-2 ServletActionContext類的常用方法

方法

描述

public static HttpServletRequest getRequest()

獲得HttpServletRequest對象

public static ServletContext getServletContext()

獲得ServletContext對象

public static HttpServletResponse getResponse()

獲得HttpServletResponse對象

提示

ServletActionContext類并沒有定義獲得HttpSession對象的方法,但是可以通過HttpServletRequest對象獲得。

下面我們修改登錄案例,使用ServletActionContext類來實現相同的功能,此時只需修改Action類的execute方法即可,代碼如下所示。

public String execute() { AdminDao ad=new AdminDao(); if(ad.checkLogin(name, pwd)) { HttpSession hs=ServletActionContext.getRequest().getSession(); hs.setAttribute("logname", name); return SUCCESS; } else return ERROR; }

3.5?使用MyEclipse簡化Struts 2開發

我們在開發上面的登錄案例時,其中的Action(AdminAction)、struts.xml都是手工創建和配置的,這無疑會影響開發效率,還容易出錯。MyEclipse充分考慮到了這一點,并在較高的版本中提供了圖形化開發支持。

示例3.3

我們打開上面登錄案例中的struts.xml文件,切換到設計視圖,如圖3.1.12所示。

?

圖3.1.12 設計視圖

登錄案例中的相關配置在上圖淋漓盡致的表現了出來,非常的直觀。在圖的右側有一個面板(Palette),該面板中提供了一些快捷按鈕可以讓我們以圖形化的方式簡化Struts 2開發。

單擊面板中的按鈕后并在相應的package中進行單擊,彈出如圖3.1.13所示的對話框。

?

圖3.1.13 新建Action

在該對話框中可以設置Action的名字、result等內容,單擊【Finish】按鈕后MyEclipse會自動生成Action和struts.xml文件中的相關代碼。

雖然MyEclipse提供高效的圖形化開發支持,但是對于初學著來說建議使用手工開發的方式。

本章總結

?Struts 2的優勢

(1)Struts 2不與Servlet API耦合嚴重,測試方便。

(2)Struts 2屬于非侵入式設計。

?Struts 2的體系結構

(1)FilterDispatcher是Struts 2中最重要的一個類,它相當于Struts 1中的核心控制器ActionServlet。該類其實是一個過濾器,在web.xml文件中進行配置,負責攔截客戶端請求。

(2)攔截器即Interceptor,它是Struts 2的重要特性,Struts 2框架的大多數功能都是通過攔截器實現的。攔截器圍繞著Action和Result的執行而執行,攔截器的方法會在Action執行之前或執行之后自動執行,這種方式可以把通用的操作動態的插入到Action執行的前后,非常有利于系統解耦。

(3)Action即業務邏輯控制器,跟Struts 1中的Action所起的作用相似。

(4)Result即結果視圖,主要作用是在Action調用結束后調度視圖,并決定視圖以哪種形式在客戶端瀏覽器展現。

??Struts 2訪問Servlet API

(1)解耦訪問方式。

(2)耦合訪問方式。


任務實訓部分

1:查詢管理員

訓練技能點

使用MyEclipse手工進行Struts 2開發

??需求說明

使用理論部分的數據庫,并實現查詢功能。使用一個頁面把所有的管理員信息顯示出來。

??實現步驟

(1)?使用MyEclipse創建工程并添加Struts 2支持

(2)?創建對應管理員表的實體Bean(Admin)

(3)?由于在多個地方都要使用JDBC進行數據庫操作,所以需要創建一個DAO工廠類DaoFactory,實現數據庫連接和關閉

(4)?創建實現查詢功能的JavaBean(AdminDao),把所有數據封裝到List中

(5)?創建業務邏輯控制器(QueryAction),在execute方法中調用AdminDao查詢所有的管理員信息并存儲到request中,參考代碼如下所示。

public String execute() { AdminDao ad=new AdminDao(); List<Admin> adminList=ad.getAllAdmin(); Map req=(Map)ActionContext.getContext().get("request"); req.put("adminList", adminList); return SUCCESS; }

(6)?創建顯示管理員信息的視圖list.jsp,首先才request對象中取出集合,然后通過循環把集合中的管理員信息輸出到頁面上,參考代碼如下所示。 ?

<body><table width="350" border="1" align="center"><caption>管理員列表</caption><tr bgcolor="darkgray"><td align="center">管理員編號</td><td align="center">管理員名稱</td></tr> <% List<Admin> adminList=(List<Admin>)request.getAttribute("adminList"); for(int j=0;j<adminList.size();j++) { Admin admin=adminList.get(j);%><tr><td align="center"><%=admin.getId() %></td><td align="center"><%=admin.getName() %></td></tr> <% }%></table><br><center><a href="addAdmin.html">添加管理員</a></center></body>

(7)?在struts.xml中進行Action配置,參考代碼如下所示。

<struts> <package name="admin" extends="struts-default"> <action name="query" class="com.zy.QueryAction"> <result name="success" type="dispatcher">/list.jsp</result> </action> </package> </struts>

(8)?部署項目并訪問http://localhost:8080/Web應用名/query.action,運行效果如圖3.2.1所示。

?

圖3.2.1 運行效果

2:添加管理員

訓練技能點

使用MyEclipse手工進行Struts 2開發

??需求說明

在上一任務的基礎上實現添加管理員功能,創建一個視圖addAdmin.html,用戶輸入登

錄名稱和登錄密碼后可以把這些數據信息保存到數據庫中

??實現步驟

(1)?在AdminDao類中增加一個使用JDBC添加管理員的方法addAdmin()

(2)?創建視圖addAdmin.html,提供添加管理員的界面

(3)?創建ActionForm對應視圖addAdmin.html

(4)?創建業務邏輯控制器(AddAction),在execute方法中調用AdminDao里添加管理員的方法,參考代碼如下所示。

public class AddAction extends ActionSupport { private String logName; //與addAdmin.html表單中的元素名對應 private String logPwd1; //與addAdmin.html表單中的元素名對應 public String execute() { AdminDao ad=new AdminDao(); if(ad.addAdmin(logName, logPwd1)) return SUCCESS; else return ERROR; }

//省略getter和setter方法

}

(5)?在struts.xml中進行相關配置,添加成功后跳轉到list.jsp頁面,添加失敗就跳轉到error.jsp頁面,參考代碼如下所示。

<action name="add" class="com.zy.AddAction"> <result name="success" type="redirect">query.action</result> <result name="error" type="redirect">/error.jsp</result> </action>

在resutle元素中配置跳轉結果時,可以設置跳轉到某個action,格式是“action的邏輯名.action”。

(6)?運行效果如圖3.2.2所示。?

圖3.2.2 添加管理員

3:刪除管理員

訓練技能點

使用MyEclipse手工進行Struts 2開發

??需求說明

在上一任務的基礎上,實現刪除管理員功能。在管理員列表里,單擊每行后邊的【刪除】 超鏈接可以刪除本行的管理員

??實現步驟

(1)?在AdminDao類中增加一個使用JDBC刪除管理員的方法delAdmin()

(2)?在視圖list.jsp中增加【刪除】超鏈接,代碼如下所示

<a href="del.action?id=<%=admin.getId() %>">刪除</a>

(3)?創建業務邏輯控制器(DelAction),在execute方法中調用AdminDao里刪除管理員的方法。

(4)?刪除成功后跳轉到視圖list.jsp。

4:實現簡易計算器

訓練技能點

使用MyEclipse手工進行Struts 2開發

??需求說明

在頁面上制作一個簡單的計算器,實現加、減、乘、除運算,要求用Struts 2實現。??

??實現步驟

(1)?創建Action

(2)?創建包含表單的視圖頁面

(3)?在struts.xml中進行配置?

圖3.2.3 效果圖

鞏固練習

一、選擇題

1. 以下關于Struts 2的說法錯誤的是()。

A.?Struts 2是Struts 1的版本升級,體系沒變,修復了一些缺陷

B.?Struts 2采用的是WebWork的設計核心

C.?Struts 2相比Struts 1變化較大

D.?Struts 2融合了Struts 1和Webwork的優點

2. 以下不是Struts 2組件的是()。

A.?Action

B.?FilterDispatcher

C.?ActionForm

D.?ActionServlet

3. 以下關于Struts 2配置文件說法正確的是()。

A.?必須放在WEB-INF/classes目錄下

B.?名字必須是struts.xml

C.?引入了包(package)

D.?必須在web.xml文件中進行配置

4. 以下關于Struts 2的Action說法錯誤的是()。

A.?Action前后可以配置攔截器,也可以不用攔截器

B.?Action可以封裝請求參數,不再需要ActionForm

C.?Action必須繼承ActionSupport類

D.?Action通常有屬性和getter/setter方法

5. 以下關于Struts 2說法錯誤的是()。

A. ?ActionContext的getRequest方法可以獲得request對象。

B. ?ActionContext的getSession方法可以獲得HttpSession對象。

C. ?ServletActionContext類的getSession方法可以獲得HttpSession對象。

D. ?ServletActionContext是ActionContext的子類。

?二、上機練習

?在任務實訓的基礎上,實現修改密碼的功能。在管理員列表頁面增加【修改】超鏈接,

?當用戶單擊某個【修改】超鏈接時跳轉到修改密碼頁面,在這個頁面用戶必須先輸入

?原密碼,然后再輸入兩次新密碼。如果原密碼正確才進行修改。運行效果如圖3.3.1

?和3.3.2 所示。

?

圖3.3.1 增加【修改】超鏈接

?

圖3.3.2 密碼修改頁面

?

總結

以上是生活随笔為你收集整理的Struts 2基础入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。