1.使用HttpClient发起登录请求:
GET /sq_xa_apartment/api/mobile/exter.jhtml?serviceCode=0001&username=fangdong&password=E10ADC3949BA59ABBE56E057F20F883E HTTP/1.1
Accept text/html, application/xhtml+xml, */*Accept-Encoding gzip, deflate
Accept-Language zh-CN
Connection Keep-Alive
Host 192.168.39.175:8086
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
2.业务处理,web服务端接受请求,验证身份,存入session
3.web中间件响应请求
(Status-Line) HTTP/1.1 200 OK
Cache-Control no-cache
Date Fri, 23 Nov 2012 04:29:41 GMT
Expires Thu, 01 Jan 1970 00:00:00 GMT
Pragma No-cache
Server Apache-Coyote/1.1
Set-Cookie JSESSIONID=60989C8636D962E56E7422A608119920;Path=/sq_xa_apartment
Transfer-Encoding chunked
这是服务器为每个客户端分配的session内存存储标识,以后每次客户端调用只要把这个JSESSIONID 加入cookie或着作为参数传递给服务端。
4.再次请求服务端
取得上次返回的cookie,加入新的请求中
httpclientPost.setHeader("cookie","JSESSIONID=60989C8636D962E56E7422A608119920");
请求的报文如下
GET /sq_xa_apartment/api/mobile/exter.jhtml?flag=1&serviceCode=0002&pageNum=1&pageSize=10&identityCard= HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Encoding gzip, deflate
Accept-Language zh-CN
Connection Keep-Alive
Cookie JSESSIONID=60989C8636D962E56E7422A608119920
Host 192.168.39.175:8086
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
知识点: http报文格式
当然如果是用ie访问方式则不用做上述的步骤,因为浏览器本身会缓存对应的jsession,如果客户端禁用了cookie事,就需要把这个jsession当做参数传递给web服务器,
处理方式如下
1.LoginSessionListener方法实现了HttpSessionListener,并且重写sessionCreated和sessionDestroyed方法
2.在web.xml注册LoginSessionListener
3. 使用SessionContext.getSession(jsessionid)
String sessionId = req.getParameter("jsessionid"); HttpSession session = sessioncontext.getSession(sessionId);
可以参考 URL:http://laolang.cn/back-end-develop/getsessionjava-servlet-api.html