Servlet基础_0300_Cookie

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值