Web 浏览器与 Web 服务器之间的一问一答的交互过程必须遵守一定的规则,这样的规则就是 HTTP 协议。
HTTP 是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议之上的一个应用层的协议,用于定义 Web 浏览器与 Web 服务器之间交互数据的过程以及数据本身的格式。
HTTP 是一个无状态的协议,也就是没有记忆力,这意味着每一次的请求都是独立的,缺少状态意味着如果后续处理需要前面的信息,则它必须要重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就很快。
HTTP 的这种特性有优点也有缺点:
/param/list?username=wmyskxz
问题:可以解决数据共享的问题,但是这种方式一不安全,二数据允许传输量只有1kb
2.使用Cookie技术
3.使用Session技术 英文直接翻译过来就是小甜品,Cookie 的作用呢,通俗的说就是当一个用户通过 HTTP 访问一个服务器时,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据又被完整地带回给服务器。
这个作用就像是你去超市购物时,第一次给你办了一张购物卡,在这个购物卡里存放了一些你的个人信息,下次你再来这个超市的时候,你就只需要带上你的购物卡,直接购物就好了。
Cookie c = new Cookie(String name,String value); // 相当于办卡
response对象.addCookie(cookie对象) // 相当于把卡交给用户
Cookie[] cs = request对象.getCookies();
for(Cookie c : cs){
if(“username”.equals(c.getName())){
String value = c.getValue();
}
}
setValue(String newValue)
重新设置void setMaxAge(int expiry)
expiry > 0:设置 Cookie 对象能够存活 expiry 秒,即使关闭浏览器,也不影响 Cookie 中的共享数据,比如设置一个月:setMaxAge(60*60*24*30);
expiry = 0:立即删除当前的 Cookie 信息
expiry < 0:关闭浏览器时销毁 setMaxAge(0)
来实现url-pattern
为 /cookie/login,相对路径则为:/cookie/ void setPath(String uri)
Cookie对象.setPath("/");
表示当前应用中的所有的资源都能够共享该Cookie信息www.baidu.com / news.baidu.com / map.baidu.com
Cookie对象.setDomain("baidu.com");
Cookie 的作用其实就是一种会话跟踪技术,但存在一些缺陷:
Session:会话,从浏览器打开开始,直到浏览器关闭结束,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。Session 也可以称为会话 Cookie
前面已经介绍了 Cookie 可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie,如果 Cookie 很多,则无形增加了客户端与服务端的数据传输量,而 Session 的出现正是为了解决这个问题。
同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie 值,而是只要传回一个 ID,这个 ID 就是客户端第一次访问服务器生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的 ID,客户端只要传回这个 ID 就行了,这个 ID 通常是 NAME 为 JSESIONID 的一个 Cookie。
request对象.getSession()
和参数为true的一样
request对象.getSession(true)
获取Session对象,如果没有Session对象,直接创建一个新的返回,缺省值
request对象.getSession(false)
获取Session对象,如果没有返回nullSession对象.setAttribute(String name, Object value)
Object value = Session对象.getAttribute(String name);
Session对象.removeAttribute(String name);
void invalidate()
void setMaxInactiveInterval(int interval)
Session对象.setAttribute(“USER_IN_SESSION”,user)
/path/Servlet;jsessionid=sessionid
2.使用响应对象中的encodeURL(String path)实现 jsessionid 的自动拼接
String path = resp.encodeURL("path/Servlet");