天天看點

java result 跳轉_Struts2 Result詳解

1,Result原理

1) Result元件是Struts2中用于輸出的元件,實際上就是Java代碼。

2)Struts2中預制了10中類型的Result,這些Result什麼在struts-default.xml中。

這些類實際上都事先了統一的接口:Result.

Java代碼  

java result 跳轉_Struts2 Result詳解

3)重點講解一下類型的Result

--dispatcher(預設類型,轉發到一個頁面)

當一個請求到來,伺服器直接轉發到另一個頁面,不能是另一個action。由于這個過程在伺服器内部完成,用戶端(浏覽器)并不知道,是以在位址欄不會顯示真實通路的頁面,而顯示都是所請求的action的位址。在servlet中相當與forword轉發。

--redirect  (重定向到一個頁面)。

當一個請求到來,服務端将實際位址response給浏覽器,然後浏覽器重新發起請求,這個過程,浏覽器是知道通路的頁面的實際位址的,是以在浏覽器的位址欄顯示的是實際通路的jsp頁面位址。但是這種類型不能重定向到一個action.

--chain  轉發到一個action,而不是頁面

--redirectAction 重定向到一個action

跳轉到其他包的action:

Java代碼  

java result 跳轉_Struts2 Result詳解

dashboard

/secure

使用redirectAction 帶參數

Java代碼  

java result 跳轉_Struts2 Result詳解

test.action

${name}

--stream

--json

4)使用方式

2、Stream類型的Result詳解

1)Stream是用于向頁面直接輸出二進制資料,比如登陸頁面的驗證碼圖檔,就可以在服務端生成,然後由這種類型的Result輸出

2) 使用

輸出屬性名

--在struts.xml中,我們可以使用param來給元件的屬性注入預設值

--,這裡inputName對應的是StreamResult的inputName屬性,這樣配置相當于會調用StreamResult的setInputName方法給它注入屬性值。

--注入的屬性值,是Action中的某個屬性的名稱,如下圖,inputName是StreamResult中的一個屬性。在Action中作二進制輸出的屬性要求其類型為InputStream。

java result 跳轉_Struts2 Result詳解

-- Result會建立一個輸出流,接到Action中的輸入流,向頁面輸出。

3) 驗證碼案例:

struts.xml中配置:

Java代碼  

java result 跳轉_Struts2 Result詳解

class="com.netctoss.action.CreateImageAction">

p_w_picpathStream

CreateImageAction.java

Java代碼  

java result 跳轉_Struts2 Result詳解

public class CreateImageAction

extends BaseAction {

//ouput

private InputStream p_w_picpathStream;

public String execute() {

//生成驗證碼圖檔

Map map =

ImageUtil.createImage();

//通過周遊得到唯一生成的驗證碼

String p_w_picpathCode =

map.keySet().iterator().next();

//将驗證碼記錄到session,在登入驗證時使用

session.put("p_w_picpathCode", p_w_picpathCode);

//根據驗證碼,得到圖檔

BufferedImage p_w_picpath = map.get(p_w_picpathCode);

//将圖檔轉換為輸入流,由result作輸出

try {

p_w_picpathStream =

ImageUtil.getInputStream(p_w_picpath);

} catch (IOException e) {

e.printStackTrace();

return "error";

}

return "success";

}

public InputStream getImageStream() {

return p_w_picpathStream;

}

public void setImageStream(InputStream p_w_picpathStream) {

this.p_w_picpathStream = p_w_picpathStream;

}

}

Java代碼  

java result 跳轉_Struts2 Result詳解

function change(p_w_picpathObj) {

p_w_picpathObj.src = "createImage?date=" + new Date().getTime();

}

驗證碼:

BaseAction.java 實作接口SessionAware

Java代碼  

java result 跳轉_Struts2 Result詳解

public class BaseAction implements SessionAware {

protected Map session;

public void setSession(Map session) {

this.session = session;

}

}

3、Json類型的Result詳解

1) 向頁面輸出json格式的字元串

2) struts2 并沒有預制這種類型的Result,但是他非常常用,往往用于頁面的異步校驗。

3) 使用步驟

a,導包:struts2-json-plugin-2.1.8.1.jar

b,struts.xml中将要使用json類型Result的package繼承json-default

c,在struts.xml中配置result

--最常用,隻是輸出單個屬性

Java代碼  

java result 跳轉_Struts2 Result詳解

指定Action的一個屬性名

注意: name="root"是固定用法;

如指定的屬性是boolean類型,那麼Result會把這個屬性做成字元串"true";

如指定的屬性是JavaBean,那麼Result會把這個屬性做成字元串{"code":"12"}

--輸出多個屬性

Java代碼  

java result 跳轉_Struts2 Result詳解

屬性名1,屬性名2,...

注意:Result會将這一組屬性做成一個json輸出,

如Action中有屬性code="aaa",name="zs"

可以将這2個屬性做成一個json

{"code":"aaa","name":"zs"}

--輸出Action中的所有屬性

Java代碼  

java result 跳轉_Struts2 Result詳解

注意:Result會将Action中所有的屬性做成一個

json輸出{"":"","":""}

java result 跳轉_Struts2 Result詳解