通过jQuery从服务器获取或设置Header的自定义参数值,如会话参数:SID。
Servlet代码:
package com.demo.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Services")
public class Services extends HttpServlet {
private static final long serialVersionUID = 1L;
public Services() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("SID", "sid_" + Math.round(Math.random() * 1000));
// 客户端无法获取此值
response.setHeader("Set-Cookie", "WQERQWITQRUWORE");
response.getWriter().print("{\"msg\":\"ok\",\"code\":0}");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
String sid = request.getHeader("SID");
System.out.println("SID:" + sid);
String xxx = request.getHeader("XXX");
System.out.println("XXX:" + xxx);
response.getWriter().print("{\"msg\":\"ok\",\"code\":0}");
}
}
HTML及JavaScript代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>从服务器获取或设置Header的值</title>
<script type="text/javascript" src="lib/jquery-1.7.2.min.js"></script>
</head>
<body>
<h3>Header中会话参数(SID)的获取和设置</h3>
<br/>
<button type="button" onclick="get()">GET SID</button>
<br/>
<br/>
<button type="button" onclick="set()">SET SID</button>
<br/>
<br/>
<div style="border:1px solid #ccc;padding:20px;">
<span id="data"></span><br/>
<span id="status"></span><br/>
<strong><span id="sid"></span></strong>
</div>
<script type="text/javascript">
//获取服务器上的Header值
function get() {
$.get('Services', { },
function (data, textStatus,resObj) {
$('#data').html(data);
$('#status').html(textStatus);
//获取自定义header值
$('#sid').html(resObj.getResponseHeader('SID'));
//无法获取Set-Cookie的值
//alert(resObj.getResponseHeader("Set-Cookie"));
//获取所有header值
//console.log(resObj.getAllResponseHeaders());
/*
* erver: Apache-Coyote/1.1
* SID: sid_786
* Content-Length: 21
* Date: Tue, 15 Apr 2014 14:23:48 GMT
*/
},'text');
}
//-----------------------------------------------------------
//设置Header值,并发送到服务器
function set(){
$.ajax({
url: "Services",
type: "POST",
//1-参数模式
headers: {
"SID" : "10086"
},
beforeSend: function(reqObj, settings) {
//2-动态设置
reqObj.setRequestHeader('XXX', 'VVV');
},
data: {},
error: function(resObj, textStatus, errorThrown) {
//TODO
},
success: function(data, textStatus, resObj) {
alert(resObj.responseText);
}
});
}
</script>
</body>
</html>
注:Set-Cookie:为JavaEE里面设置HttpOnly的形式,JavaScript无法获取,更多参见:http://en.wikipedia.org/wiki/HTTP_cookie#HttpOnly_cookie