JavaWeb如何將後臺資料傳遞到前臺頁面HttpServletResponse和HttpServletRequest
阿新 • • 發佈:2019-01-05
繼續總結:Java經過Action後,怎麼將action中返回的資料寫到前臺去
先了解下:HttpServletResponse物件
(1).Web伺服器收到一個http請求,會針對每個請求建立一個HttpServletRequest和HttpServletResponse物件,向客戶端傳送資料找HttpServletResponse,從客戶端取資料找HttpServletRequest;
(2).HttpServletResponse物件可以向客戶端傳送三種類型的資料:a.響應頭b.狀態碼c.資料
(3).自己去看HttpServletResponse的API
(4).rsponse向前臺返回資料:
a.使用OutputStream向客戶端寫入中文:
response.setHeader("Content-type","text/html;charset=UTF-8");//向瀏覽器傳送一個響應頭,設定瀏覽器的解碼方式為UTF-8
String data = "中國";
OutputStream stream = response.getOutputStream();
stream.write(data.getBytes("UTF-8"));
b.使用Writer向客戶端寫入中文:
看看企業一般怎麼用:不管怎麼用,無非就是封裝成方法,向前臺返回資料response.setCharacterEncoding("UTF_8");//設定Response的編碼方式為UTF-8 response.setHeader("Content-type","text/html;charset=UTF-8");//向瀏覽器傳送一個響應頭,設定瀏覽器的解碼方式為UTF-8,其實設定了本句,也預設設定了Response的編碼方式為UTF-8,但是開發中最好兩句結合起來使用 //response.setContentType("text/html;charset=UTF-8");同上句程式碼作用一樣 PrintWriter writer = response.getWriter(); writer.write("中國");
Action:
上面得到結果result,向前臺返回顯示資料用actionWritepublic void searchModelIsUsed() { <strong>HttpServletRequest req = ServletActionContext.getRequest();</strong> boolean result1 = this.voucherTypeService.queryProductionMode(); if(result1==false){ //非生產模式則可修改模板 String result="is_PRODUCTION_MODE"; this.<strong>actionWrite</strong>("{success:'true',info:'" + result + "'}"); }else{ String vmId = req.getParameter("vmId"); boolean result = this.voucherTypeService.checkVoucherModelUsed(vmId); this.actionWrite("{success:'true',info:'" + result + "'}"); } }
actionWrite如下:
public void actionWrite(String result) {
if(result == null){
result = "";
}
HttpServletResponse resp = ServletActionContext.getResponse();
resp.setContentType("text/json;charset=UTF-8");
resp.setHeader("Cache-Control", "no-cache");
PrintWriter pw = null;
try {
pw = resp.getWriter();
pw.write(result);
} catch (IOException e) {
throw new EVoucherException("獲取http寫入流異常" + e.getMessage());
} finally {
if (pw != null) {
pw.close();
}
}
}
可以看到actionWrite方法就是一個HttpServletResponse設定相關資訊後利用PrintWriter向前臺寫資料
在前臺JS中,就是響應response後臺傳遞過來的資料就OK。
callback : function (options,success,response){
if(success){
checkSessionOverdue(response.responseText);
var msg = Ext.JSON.decode(response.responseText);
var msgInfo = msg.info;
if(msgInfo == 'true'){
Ext.Msg.alert("系統提示", "當前模板已存在歷史資料,只能修改模板名稱跟啟用日期!");
isAddVoucherModel = false;
refreshAddVoucherModelForm(false);
}else if(msgInfo=='is_PRODUCTION_MODE'){
isAddVoucherModel = true;
refreshAddVoucherModelForm(false);
}else{
isAddVoucherModel = true;
refreshAddVoucherModelForm(false);
}
}
}