后端开发--基础概念:Session 与 Cookie 的比较(2)

本文通过两个实例详细介绍了Session和Cookie在Servlet中的应用。Session实例展示了如何跟踪用户会话信息,包括访问次数等;Cookie实例则演示了如何设置及读取客户端的Cookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期:2017/11/22

     下面以代码例子,讲述 Session 和 Cookie 在servlet的使用。


一、Session

例子1:

package srevletTest.Sessions;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ShowSession extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		String title = "Session Tracking Example";
		HttpSession session = req.getSession(true);
		String heading;
		// Use getAttribute instead of getValue in version 2.2.
		Integer accessCount = (Integer) session.getAttribute("accessCount");
		if(accessCount == null){
			accessCount = new Integer(0);
			heading = "welcome Newcomer.";
		} else{
			heading="Welcome back.";
			accessCount = new Integer(accessCount.intValue()+1);
		}
		// Use setAttribute instead of putValue in version 2.2.
		session.setAttribute("accessCount", accessCount);
		
		out.println("<html><head><title>Session追踪</title></head>"
				+ "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">"
				+ heading + "</H1>\n"
				+ "<H2>Information on Your Session:</H2>\n"
				+ "<TABLE BORDER=1 ALIGN=\"CENTER\">\n"
				+ "<TR BGCOLOR=\"#FFAD00\">\n" + "  <TH>Info Type<TH>Value\n"
				+ "<TR>\n" + "  <TD>ID\n" + "  <TD>" + session.getId() + "\n"
				+ "<TR>\n" + "  <TD>Creation Time\n" + "  <TD>"
				+ new Date(session.getCreationTime()) + "\n" + "<TR>\n"
				+ "  <TD>Time of Last Access\n" + "  <TD>"
				+ new Date(session.getLastAccessedTime()) + "\n" + "<TR>\n"
				+ "  <TD>Number of Previous Accesses\n" + "  <TD>"
				+ accessCount + "\n" + "</TABLE>\n" + "</BODY></HTML>");
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req,resp);
	}
	

}



二、Cookie

例子2:


package srevletTest.Cookies;

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;

//设置Cookie

//1:服务器可以向客户端写内容
//2:只能是文本内容
//3:客户端可以阻止服务器写入
//4:只能拿自己webapp写入的东西
//5:Cookie分为两种,第一种:属于窗口/子窗口(放在内存中的),第二种:属于文本(有生命周期的)
//6:一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到 (路径 = URL)(路径 != 真实文件路径)

public class SetCookies extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		for(int i=0;i<3;i++){
			// Default maxAge is -1, indicating cookie applies only to current browsing session.
			Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);
			resp.addCookie(cookie);
			// Cookie is valid for an hour, regardless of whether user quits browser, reboots computer, or whatever.
			cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i);
			cookie.setMaxAge(3600);
			resp.addCookie(cookie);
		}
		PrintWriter out = resp.getWriter();
		out.println("<html><head><title>设置Cookie</title></head>"
				+ "<BODY>\n" 
				+ "<H1 ALIGN=\"CENTER\">"
				+ "设置Cookie" + "</H1>\n"
				+ "6个Cookie\n"
				+ "<A HREF=\"ShowCookies\">\n"
				+ "查看</A>.\n"
				+ "</BODY></HTML>");

	}

}

例子3:


package srevletTest.Cookies;

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;

//读取客户端的Cookie

public class ShowCookies  extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	    PrintWriter out = resp.getWriter();
	    String title = "Active Cookies";
	    out.println("<html><head><title>获取客户端Cookie</title></head>" +
	                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
	                "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
	                "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" +
	                "<TR BGCOLOR=\"#FFAD00\">\n" +
	                "  <TH>Cookie Name\n" +
	                "  <TH>Cookie Value");	
	    Cookie[] cookies = req.getCookies();
	    if(cookies != null){
	    	Cookie cookie;
	    	for(int i=0; i< cookies.length;i++){
	    		cookie = cookies[i];
	    		out.println("<TR>\n" +
	                    "  <TD>" + cookie.getName() + "</TD>\n" +
	                    "  <TD>" + cookie.getValue() + "</TD></TR>\n" );
	    		
	    	}
	    }
	    out.println("</TABLE></BODY></HTML>");
	    }
	
	

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值