1,Result原理
1) Result元件是Struts2中用于輸出的元件,實際上就是Java代碼。
2)Struts2中預制了10中類型的Result,這些Result什麼在struts-default.xml中。
這些類實際上都事先了統一的接口:Result.
Java代碼
3)重點講解一下類型的Result
--dispatcher(預設類型,轉發到一個頁面)
當一個請求到來,伺服器直接轉發到另一個頁面,不能是另一個action。由于這個過程在伺服器内部完成,用戶端(浏覽器)并不知道,是以在位址欄不會顯示真實通路的頁面,而顯示都是所請求的action的位址。在servlet中相當與forword轉發。
--redirect (重定向到一個頁面)。
當一個請求到來,服務端将實際位址response給浏覽器,然後浏覽器重新發起請求,這個過程,浏覽器是知道通路的頁面的實際位址的,是以在浏覽器的位址欄顯示的是實際通路的jsp頁面位址。但是這種類型不能重定向到一個action.
--chain 轉發到一個action,而不是頁面
--redirectAction 重定向到一個action
跳轉到其他包的action:
Java代碼
dashboard
/secure
使用redirectAction 帶參數
Java代碼
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。
-- Result會建立一個輸出流,接到Action中的輸入流,向頁面輸出。
3) 驗證碼案例:
struts.xml中配置:
Java代碼
class="com.netctoss.action.CreateImageAction">
p_w_picpathStream
CreateImageAction.java
Java代碼
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代碼
function change(p_w_picpathObj) {
p_w_picpathObj.src = "createImage?date=" + new Date().getTime();
}
驗證碼:
BaseAction.java 實作接口SessionAware
Java代碼
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代碼
指定Action的一個屬性名
注意: name="root"是固定用法;
如指定的屬性是boolean類型,那麼Result會把這個屬性做成字元串"true";
如指定的屬性是JavaBean,那麼Result會把這個屬性做成字元串{"code":"12"}
--輸出多個屬性
Java代碼
屬性名1,屬性名2,...
注意:Result會将這一組屬性做成一個json輸出,
如Action中有屬性code="aaa",name="zs"
可以将這2個屬性做成一個json
{"code":"aaa","name":"zs"}
--輸出Action中的所有屬性
Java代碼
注意:Result會将Action中所有的屬性做成一個
json輸出{"":"","":""}