您的位置:首页 > 其它

Servlet基础_0300_Cookie

2011-09-26 18:59 393 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: