web服务器和Client基础:
1.web服务器可以向客户端写内容
2.web服务器向客户端写的内容只能是文本文件
3.浏览器客户端可以阻止web服务器写入东西
4.web服务器端的servlet只能拿自己webapp的写入的内容
Cookie基础:
1.Cookie:保存到客户端的一个文本文件,与特定的浏览器客户端相关
2.Cookie以"名--值"对的形式保存数据
3.创建Cookie: new Cookie(name,value)
实验一:探究Cookie的类型以及存活时间
//测试类
/**
* @author 紫竹
* @function 探讨Cookie
*/
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Cookie1Test extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
for(int i=0;i<3;i++){
/**
* 没有设置时间的Cookie,默认存活的时间是存活到这个窗口关闭,当这个窗口关闭后,这个cookie就不存在了;且这个cookie它只存在于当前窗口,以及其子窗口(直接从当前窗口开一个新窗口时,
* 能够访问到这个cookie;如果直接开另一个新的窗口(IE8是新建会话),访问不到这个cookie)
* 本质:没有设置时间的Cookie只是写入到了这个浏览器的内存
*
*/
Cookie cookie = new Cookie("current-cookie-name"+i,"current-cookie-value"+i);
response.addCookie(cookie);
/**
* 这个Cookie写入了文件,新开的浏览器也能访问这个Cookie
*/
Cookie cookie2 = new Cookie("persist-cookie-name"+i,"persist-cookie-value"+i);
cookie2.setMaxAge(3600);//一个小时过期
response.addCookie(cookie2);
}
PrintWriter pw = response.getWriter();
pw.print("<a href='ShowCookiesServlet'>show all cookies</a>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
找到IE的Cookie文件,里面的内容如下:
persist-cookie-name0
persist-cookie-value0
127.0.0.1/Servlet_0300_Cookie/servlet/
1024
1458379776
30178369
4117245440
30178360
*
persist-cookie-name1
persist-cookie-value1
127.0.0.1/Servlet_0300_Cookie/servlet/
1024
1458379776
30178369
4117255440
30178360
*
persist-cookie-name2
persist-cookie-value2
127.0.0.1/Servlet_0300_Cookie/servlet/
1024
1458379776
30178369
4117265440
30178360
*
内容里只存在persist的三个Cookie,证明了设置了时间的Cookie写入了文件,而没有设置时间的Cookie只在当前浏览器有效,当浏览器关闭时,临时Cookie自动清除
实验二:探究能够访问Cookie的路径(url)
a.先实验一种情况:
1.将web.xml做如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Cookie1Test</servlet-name>
<servlet-class>com.servlet.Cookie1Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Cookie1Test</servlet-name>
<url-pattern>/servlet/Cookie1Test</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ShowCookiesServlet</servlet-name>
<servlet-class>com.servlet.ShowCookiesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowCookiesServlet</servlet-name>
<url-pattern>/ShowCookiesServlet</url-pattern>
</servlet-mapping>
</web-app>
//ShowCookiesServlet.java文件如下:
/**
* @author 紫竹
* @function 探讨Cookie
*
*/
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowCookiesServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
Cookie[] cookies = request.getCookies();
System.out.println(cookies);
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
pw.println(cookie.getName()+" "+cookie.getValue()+"<br/>");
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
2.删除IE临时文件夹下所有的文件,以清除所有Cookie
3.访问 http://127.0.0.1:8080/Servlet_0300_Cookie/servlet/Cookie1Test ; 然后访问 http://127.0.0.1:8080/Servlet_0300_Cookie/ShowCookiesServlet 输出结果为空,任何内容都没有
b.实验另外一种情况:
4.然后将web.xml文件修改成这样:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Cookie1Test</servlet-name>
<servlet-class>com.servlet.Cookie1Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Cookie1Test</servlet-name>
<url-pattern>/Cookie1Test</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ShowCookiesServlet</servlet-name>
<servlet-class>com.servlet.ShowCookiesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowCookiesServlet</servlet-name>
<url-pattern>/servlet/ShowCookiesServlet</url-pattern>
</servlet-mapping>
</web-app>
5.再次删除IE临时文件夹下所有的文件,以清除先前的Cookie
6.访问 http://127.0.0.1:8080/Servlet_0300_Cookie/Cookie1Test ; 然后访问 http://127.0.0.1:8080/Servlet_0300_Cookie/servlet/ShowCookiesServlet 输出结果为:
current-cookie-name0 current-cookie-value0
persist-cookie-name0 persist-cookie-value0
current-cookie-name1 current-cookie-value1
persist-cookie-name1 persist-cookie-value1
current-cookie-name2 current-cookie-value2
persist-cookie-name2 persist-cookie-value2
访问出了Cookie1Test的所有内容,证明servlet/jsp能够访问同一级路径(或者其子路径)下的所有Cookie