1. 程式人生 > >JavaWeb如何將後臺資料傳遞到前臺頁面HttpServletResponse和HttpServletRequest

JavaWeb如何將後臺資料傳遞到前臺頁面HttpServletResponse和HttpServletRequest

繼續總結: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:

public 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 + "'}");
		}
	}
上面得到結果result,向前臺返回顯示資料用actionWrite

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);
	}
		
	}
}