Jsp第四课 会话管理与使用
Posted 笔触狂放
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jsp第四课 会话管理与使用相关的知识,希望对你有一定的参考价值。
概述
讲会话管理之前,我们这里举个小故事:小明和小王今天没有课,买了点瓜子,花生,啤酒,炸鸡在宿舍边吃边喝边聊天。
维持三个小时的聊天开始了,在这个过程中小明说一句,小王回一句,小王说一句,小明回一句,那么小明说一句,小王回一句这一个来回称为一次对话,维持三个小时的聊天中包含了无数次对话,称为一次谈话。
同比,小明比喻成浏览器,小王比喻成服务器,浏览器向服务器发出请求,服务器回复浏览器请求,这一个来回称为一次请求,那么在一段时间内的多次请求称为一次会话。
问题:
那中途小李加入这次谈话的话,小李与小王之间的谈话称为第二个谈话。
因此这里可以总结出,一次会话表示:同一个浏览器在某一段时间内与服务器之间的多次请求。
问题
以上是一个案例,及服务器当前遇到的问题,如果大家还是不能理解,那么这里在举个例子,这里我们把服务器当做包工头,多个浏览器当做工人。假设包工头今天需要十个工人干活,每个工人按小时付钱,那么每个工人今天所做的小时都不一样,问包工人最后采取什么办法能区分每一个工人最后各自工作了多少个小时?
这里显而易见的办法就是,包工头给每一个招进来的工人进行编号,贴上唯一编号的便利贴,并开始记录每一个员工的工作时长即可。
那回归我们的知识点中,也是一样的,服务器作为给浏览器提供服务的过程中,也是需要区分浏览器的。因此开始进入我们这一次的知识点,Jsp中给我们提供了两种区分浏览器的技术供我们使用。Cookie和Session对象。
Cookie的概念以及使用
当用户使用浏览器再去访问服务器的时候,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据
Cookie中的方法_1
Cookie中的方法_2
Cookie中的方法_3
禁用Cookie
实例代码如下:
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet1
*/
@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet1() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
//当浏览器访问服务器的时候
//获得浏览器发送过来的所有cookie
Cookie[] cookies=request.getCookies();
//Servlet循环遍历所有的cookie,直到找到服务器能识别的标识为止
if (cookies!=null) {
for (int i = 0; i < cookies.length; i++) {
String name=cookies[i].getName();
System.out.println(name+"---"+cookies[i].getValue());
if (name.equals("tag")) {
//当查找到正确的数据时,终止遍历
//获取出来的中文数据,需要进行解码
String value=URLDecoder
.decode(cookies[i].getValue(),
"UTF-8");
pw.print(value);
break;
}
}
}
//创建Cookie对象,存储的中文数据需要进行转码
Cookie cookie=new Cookie("tag",
URLEncoder.encode("中国", "UTF-8"));
//表示设置Cookie在浏览器内存中保留的时间,单位以秒计算
//cookie.setMaxAge(300);
response.addCookie(cookie);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
给每一个第一次访问服务器的浏览器进行贴上唯一标签,这样浏览器便可区分浏览器,每一个浏览器访问服务器的次数即可统计。代码如下:
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet2
*/
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
int tag=0;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet2() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//默认为第一次访问
boolean isFirst=true;
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
//检查当前访问服务器的浏览器是否是第一次
Cookie[] cookies=request.getCookies();
if (cookies!=null) {
for (Cookie cookie : cookies) {
//循环遍历该浏览器的所有cookie
String name=cookie.getName();
if ("tag".equals(name)) {
isFirst=false;
String value=URLDecoder
.decode(cookie.getValue(), "UTF-8");
pw.print(value);
}
}
}
if (isFirst) {
//说明没有在该浏览器的所有cookie中找到服务器能识别的标识
//该浏览器第一次访问服务器
tag++;
String text="当前浏览器是第"+tag+"个访问服务器的浏览器";
Cookie cookie=new Cookie
("tag",URLEncoder.encode(text, "UTF-8"));
response.addCookie(cookie);
pw.print(text);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Session的概念以及使用

程序第一次调用request.getSession()方法时就会创建一个新的session,可以用isNew()方法来判断session是不是新创建的。
session对象默认30分钟没有使用,服务器就会自动销毁session。
在web.xml中可以设置session的失效时间
当需要在程序中手动设置session失效时,可以手动调用session.invalidate()
Session中的方法
Session和Cookie的区别
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
实例代码如下:
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Servlet3
*/
@WebServlet("/Servlet3")
public class Servlet3 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet3() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
//当浏览器第一次访问服务器的时候
//需要获得session对象
//requset会先查找服务器中是否有该浏览器对应的session对象
//如果没有就创建Seesion对象,如果有就获得出来用
//session对象只和浏览器有关,
//只要浏览器不关闭,服务器中所有servlet都能共享数据
HttpSession session=request.getSession();
if (session.isNew()) {
//将数据存储在session中
session.setAttribute("a", "abc");
//删除指定的数据
//session.removeAttribute("a");
//直接干掉session对象
//session.invalidate();
pw.print("当前浏览器是第一次访问,session对象刚刚被创建");
}else {
String v=(String) session.getAttribute("a");
pw.print("当前浏览器不是第一次访问,session对象是很早就存在的"+v);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
以上是关于Jsp第四课 会话管理与使用的主要内容,如果未能解决你的问题,请参考以下文章