一、struts2
1.概述
Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合並的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著太大的變化,但是相對於WebWork,Struts 2的變化很小。2. 搭建Struts2開發環境
(1)找到開發Struts2應用需要使用到的jar文件.
(2)編寫Struts2的配置文件
Struts2默認的配置文件為struts.xml ,該文件需要存放在WEB-INF/classes下,該 文件的配置模版如下:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
注意:此文件在開發的時候是放到src目錄下,程序編譯後會自動拷貝到WEB-INF/classes目錄下。
(3)在web.xml中加入Struts2 MVC框架啟動配置
在struts2中,struts框架是通過Filter啟動的。他在web.xml中的配置如下:
在StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認的配置文件struts.xml完成初始化操作。
注意:struts2讀取到struts.xml的內容後,以javabean形式存放在內存中,以後struts2對用戶的每次請求處理將使用內存中的數據,而不是每次都讀取struts.xml文件
3.動態方法調用
如果Action中存在多個方法時,可以使用!+方法名調用指定方法。
如果不想使用動態方法調用,可以通過常量struts.enable.DynamicMethodInvocation關閉動態方法調用。
4.Struts2中常用的結果類型
dispatcher:主要用於返回JSP,HTML等以頁面為基礎View視圖,這個也是Struts2默認的Result類型。在使用dispatcher時,唯一需要指定的,是JSP或者HTML頁面的位置,這個位置將被用於定位返回的頁面。
注意:用於頁面轉發,頁面跳轉過程一直是同一個線程,Action中的數據一直保存在。location只能是頁面,不能是另一個action
redirect:將用戶重定向到一個已配置好的URL。
redirectAction:將用戶重定向到一個已定義好的action。
chain 用於把相關的幾個action連接起來,共同完成一個功能。
二、案例
用戶登錄:
struts.xml的配置
//如果某個包沒有指定namespace,則該包使用默認的命名空間,默認的命名空間總是""。struts-default定義了這些攔截器和Result類型。可以這麼說:當包繼承了struts-default才能使用struts2提供的核心功能。 //訪問struts2中action的URL路徑由兩部份組成:包的命名空間+action的名稱/index.jsp//如果返回success跳轉 /error.jsp //如果出現錯誤跳轉到錯誤界面
Struts Blank struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* index.jsp
package bean; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ //private static final long serialVersionUID = 1L; private String name; private String pass; public String execute() throws Exception{ if(this.getName().equals("scott")&&this.getPass().equals("tiger")){ ActionContext.getContext().getSession().put("user",this.getName()); return this.SUCCESS; } this.addActionMessage("用戶名或密碼錯誤"); return this.ERROR; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }