1、http状态管理
(1)为什么要对http协议进行状态管理。
2、cookie技术
(1)什么是cookie
浏览器访问某个服务器时,服务器会创建一部分数据(以消息头set-cookie的方式)发送给浏览器,浏览器会将这部分数据保存下来。当浏览器再次访问该服务器时,会将这部分数据发送给服务器。通过这种方式,服务器可以维护用户的状态。在客户端(浏览器)维护用户状态的一种状态管理技术。
a,创建:
Cookie cookie = new Cookie(String name,
String value);
response.addCookie(cookie);
b,cookie的生存时间
在默认情况下,cookie会保存在内存(浏览器所维护的一块内存空间)当中。所以,当浏览器关闭,cookie会丢失。
可以设置cookie的生存时间
Cookie.setMaxAge(int seconds);
seconds > 0 : 即使浏览器关闭,cookie会以文件的方式保存在硬盘上。
seconds < 0: 默认(即保存在内存里)
seconds = 0: 删除。
c,编码问题
cookie的值只能是ascii字符,所以对于中文,可以将其转换成ascii字符的表示。我们可以在保存cookie的值时,使用String URLEncoder.encode("张三","utf-8");读取cookie值时,使用URLDecoder.decode()。
d,查询
Cookie[] cookies = request.getCookies();
如果找不到任何的cookie,返回null。
String Cookie.getName();
String Cookie.getValue();
f,路径问题
可以使用
cookie.setPath("")来修改cookie的path。
cookie.setPath("/appname"):
访问appname下的所有组件都会携带对应的cookie
cookie.setPath("/")。
访问同一个服务器内部的所有应用,都会携带对应的cookie
如果设置了cookie的域,即
cookie.setDomain(".chinesecio.com");
a,cookie只能保存字符串,并且对于中文,需要编码。
b,cookie的大小有限制(4k左右)。
c,cookie的个数也有限制(浏览器能够在本地保存的cookie的数量,大约300)。
d,cookie不是很安全。
e,cookie可以被用户禁止。
b,网页换肤
c,自动登录
d,购物车(与session技术配置使用)
3、路径问题:
(1)一般需要考虑以下四种情况
a,链接 <a href=""></a>
b,表单提交 <form action="">
c,重定向 response.sendRedirect("")
d,转发 request.getRequestDispatcher("").forward...
(2)相对路径与绝对路径
a,相对路径:不以"/"开头的路径。
b,绝对路径:以"/"开头的路径,a,b,c三种情况,绝对路径从应用名开始,而d,绝对路径从 应用名之后开始。
String request.getContextPath():返回/appname
4,session机制
(1)什么是session
在服务器端维护用户状态的一种状态管理技术。浏览器访问服务器时,服务器会创建一个对象(session对象),同时,还会生成一个标识该对象的唯一的字符串(sessionId),服务器在默认情况下,使用cookie机制将sessionId发送给浏览器。浏览器下次访问服务器时,会将sessionId携带给服务器,服务器会使用sessionId查找对应的session对象。通过这种方式,来维护用户的状态。
(2)session的使用
a,创建session
方式一:
HttpSession request.getSession();
方式二:
HttpSession request.getSession(boolean flag);
flag为true:
服务器查看请求中是否有sessionId,如果没有,则创建一个session对象,返回该对象的引用。如果有,要查看对应的session对象是否存在,如果存在,则返回该对象的引用,若不存在,则创建一个session对象。
flag为false:
服务器查看请求中是否有sessionId,如果没有,返回null。如果有,要查看对应的session对象是否存在,如果存在,则返回该对象的引用,若存在,返回null。
request.getSession()与
request.getSession(true)等价。
b,常用方法
String session.getId();
//绑订某个对象
session.setAttribute(String name,Object obj);
//找不到,返回null
Object session.getAttribute(String name)
显示某个用户是第几次访问该应用。
//设置最大不活动时间
session.setMaxInActiveInterval(int seconds)
c,设置默认超时限制
针对整个服务器或者某个特定的应用设置超时限制。
对于tomcat: tomcat_home\conf\web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
对于某个特定的应用 WEB-INF\web.xml
(1)为什么要对http协议进行状态管理。
因为http协议是一个无状态的协议,优点是,可以利用有限的资源为多个客户服务。但是,对于一些特定的应用,比如购物系统,需要记录客户端的状态,此时,需要对http协议进行状态的管理(了解)。
(2)如何时行状态的管理a,在客户端保存用户的状态。 即将用户的状态保存在浏览器端,即cookie技术。
b,在服务器端保存用户的状态。 即将用户的状态保存在服务器端,即session技术。2、cookie技术
(1)什么是cookie
浏览器访问某个服务器时,服务器会创建一部分数据(以消息头set-cookie的方式)发送给浏览器,浏览器会将这部分数据保存下来。当浏览器再次访问该服务器时,会将这部分数据发送给服务器。通过这种方式,服务器可以维护用户的状态。在客户端(浏览器)维护用户状态的一种状态管理技术。
a,创建:
Cookie cookie = new Cookie(String name,
String value);
response.addCookie(cookie);
b,cookie的生存时间
在默认情况下,cookie会保存在内存(浏览器所维护的一块内存空间)当中。所以,当浏览器关闭,cookie会丢失。
可以设置cookie的生存时间
Cookie.setMaxAge(int seconds);
seconds > 0 : 即使浏览器关闭,cookie会以文件的方式保存在硬盘上。
seconds < 0: 默认(即保存在内存里)
seconds = 0: 删除。
c,编码问题
cookie的值只能是ascii字符,所以对于中文,可以将其转换成ascii字符的表示。我们可以在保存cookie的值时,使用String URLEncoder.encode("张三","utf-8");读取cookie值时,使用URLDecoder.decode()。
d,查询
Cookie[] cookies = request.getCookies();
如果找不到任何的cookie,返回null。
String Cookie.getName();
String Cookie.getValue();
f,路径问题
http://ip:port/appname/jsp01/jsp01.jsp当中,有Cookie c = new Cookie();在创建一个cookie时,都会有一个默认的path,该值是创建该cookie的组件的地址。此时,该path是 /appname/jsp01;浏览器在访问服务器时,会比较要访问的地址addr1和cookie的path,只有path >=addr1,浏览器才会将cookie携带给服务器。
可以使用
cookie.setPath("")来修改cookie的path。
cookie.setPath("/appname"):
访问appname下的所有组件都会携带对应的cookie
cookie.setPath("/")。
访问同一个服务器内部的所有应用,都会携带对应的cookie
如果设置了cookie的域,即
cookie.setDomain(".chinesecio.com");
则浏览器会先比较要访问的地址的域名是否匹配,然后再比较path;如果只设置域名的话,一级域名是chinesecio的地址都可以共享cookie。
a,cookie只能保存字符串,并且对于中文,需要编码。
b,cookie的大小有限制(4k左右)。
c,cookie的个数也有限制(浏览器能够在本地保存的cookie的数量,大约300)。
d,cookie不是很安全。
e,cookie可以被用户禁止。
(4)cookie的使用场合
a,记录用户的使用习惯b,网页换肤
c,自动登录
d,购物车(与session技术配置使用)
3、路径问题:
(1)一般需要考虑以下四种情况
a,链接 <a href=""></a>
b,表单提交 <form action="">
c,重定向 response.sendRedirect("")
d,转发 request.getRequestDispatcher("").forward...
(2)相对路径与绝对路径
a,相对路径:不以"/"开头的路径。
b,绝对路径:以"/"开头的路径,a,b,c三种情况,绝对路径从应用名开始,而d,绝对路径从 应用名之后开始。
String request.getContextPath():返回/appname
4,session机制
(1)什么是session
在服务器端维护用户状态的一种状态管理技术。浏览器访问服务器时,服务器会创建一个对象(session对象),同时,还会生成一个标识该对象的唯一的字符串(sessionId),服务器在默认情况下,使用cookie机制将sessionId发送给浏览器。浏览器下次访问服务器时,会将sessionId携带给服务器,服务器会使用sessionId查找对应的session对象。通过这种方式,来维护用户的状态。
(2)session的使用
a,创建session
方式一:
HttpSession request.getSession();
方式二:
HttpSession request.getSession(boolean flag);
flag为true:
服务器查看请求中是否有sessionId,如果没有,则创建一个session对象,返回该对象的引用。如果有,要查看对应的session对象是否存在,如果存在,则返回该对象的引用,若不存在,则创建一个session对象。
flag为false:
服务器查看请求中是否有sessionId,如果没有,返回null。如果有,要查看对应的session对象是否存在,如果存在,则返回该对象的引用,若存在,返回null。
request.getSession()与
request.getSession(true)等价。
b,常用方法
String session.getId();
//绑订某个对象
session.setAttribute(String name,Object obj);
//找不到,返回null
Object session.getAttribute(String name)
显示某个用户是第几次访问该应用。
//设置最大不活动时间
session.setMaxInActiveInterval(int seconds)
c,设置默认超时限制
针对整个服务器或者某个特定的应用设置超时限制。
对于tomcat: tomcat_home\conf\web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
对于某个特定的应用 WEB-INF\web.xml