06javaweb会话以及会话管理技术

会话以及会话管理技术

1.会话概述:

什么是会话:

  从登录淘宝,多次刷新网页,到最终退出淘宝,整个过程就是一次会话。
  会话的特点:包含多个请求,一次完整的会话针对一个用户。

会话管理技术:

	第一种:cookie技术,客户端技术。
	第二种:session技术,服务端技术。
  购物车案列:买完商品后,加入购入车,买的商品存到什么对象比较合适?
	 1.使用request域对象保存商品信息:
	   结论:使用request保存商品信息不可以,因为每次发送请求,都会产生一个新的请求对象。
	 2.使用ServletContext域对象保存商品信息
	    结论:使用ServletContext对象保存商品信息,可以,但是不合理。
		 所以在开发中,保存会话过程中产生的数据,采用会话管理技术,也就是使用cookie和session技术
		 来保存会话过程产生的数据。

Cookie对象

1.1 什么是cookie:

    Cookie是一种会话管理技术,它是用来保存会话过程中产生的数据,然后在浏览器和服务器交互时,
    会使用cookie里面保存的数据。
    注意:首次访问服务器,浏览器不会携带cookie到服务端。

1.2 Cookie常用的API

1.构造方法:

	    1.得到cookie对象:Cookie cookie = new Cookie(String key,String value);

2.Cookie类常用的方法:

	    2.回写(响应)cookie到浏览器端: response.addCookie(cookie);
	    3.得到cookie的名称 :String key= cookie.getName(),
	      得到cookie的值:   String value =cookie.getValue();
	    4.给cookie设置生命时长: setMaxAge(int sr);
	       比如:cookie.setMaxAge(60*60*24*7),说明cookie能存活7天;
	       cookie分类:
		第一类:会话级别cookie,浏览器关闭,cookie对象就销毁了。
		第二类:持久化cookie,通过setMaxAge这个方法来设置。
	    5.给cookie设置路径,设置域名:
	      setPath(路径的url),setDomain(域名);
	      比如:域名就是服务器名称,比如说:www.baidu.com
	    6.得到cookie: Cookie[] cookies = request.getCookies();

1.3 显示用户的上次访问时间:

实现步骤:

    1.判断是否是首次访问:
        如果cookie里面有时间,说明就不是第一次访问。
    2.如果是第一次访问,创建cookie,保存时间,把这个cookie回写到浏览器端。
    3.如果不是第一次访问,把时间回写到浏览器,记住当前时间,把时间保存cookie里面。

. Session对象

1.1 什么是session

    session是一种会话管理技术,session用来保存会话过程中的数据,保存的数据存储到服务器端。
    session原理:基于cookie实现的,更确切的说是基于会话级别的cookie实现的。
1.2 HttpSession API
    session常用方法:
     >>> 1.得到session的id(JESSIONID对应的值): getId();
     >>> 2.设置session的生命时长:setMaxInactiveInterval(int interval) 
     >>> 3.销毁session: invalidate();
           得到session: HttpSession session = getSession();
    session域对象:作用范围一次完整的会话(包含多个请求)
    >>> 1.存值: setAttribute(String key,Object obj);
    >>> 2.取值: Object obj =getAttribute(String key);
    >>> 3.移除: removeAttribute(String key);
    总结域对象:request域对象   session域对象  servletContext域对象,作用范围以次变大。
		request域对象:作用范围一次请求,通常和转发操作配合使用
		session域对象:作用范围一次会话,通常和重定向操作配合使用
		servletContext域对象:作用范围整个项目,和重定向、转发操作都可以配合使用。
1.3 Session 超时管理
    session对象是有生命时长的,它的默认存活时间是30分钟。
    具体配置找tomcat软件的conf目录下的web.xml文件,如下:
	    <session-config>
			<session-timeout>30</session-timeout>
	    </session-config>
    立即销毁session对象:invalidate();
1.4 实现购物车:
   1.创建Book封装图书信息:Book
   2.创建BookDB,模拟数据库,里面保存图书
   3.提供图书的购买页面:ListBookServlet
   4.添加购物车:PurcharseServlet
   5.回显购物车图书信息:CartServlet

   如果浏览器禁用了cookie,咱们的购物车功能就不能实现了,因为session是基于cookie实现的。
   解决方案:提示用户开启cookie.
1.5 实现用户登录
     1.创建一个User类,封装用户名和密码
     2.提供一个首页面,欢迎用户登录:IndexServlet,提供一个退出的链接。
     3.提供一个登录的servelt:处理登录请求
     4.提供一个退出的servlet:处理退出首页面的请求。
     登录里面加入验证码:
     得到验证码:参考图(验证码图片)
项目代码
package cn.itcast.chapter05.cookie;

import java.io.IOException;
import java.util.Date;

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 example
 */
@WebServlet("/example")
public class example extends HttpServlet {
    
    
	private static final long serialVersionUID = 1L;
       
  

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		String time =String.format("%tF%<tF",new Date());
		Cookie cookies=new Cookie("lastAcess",time);
		
		Cookie cookies2=new Cookie("dashuju2005","2020080605048");
		response.addCookie(cookies);
		response.addCookie(cookies2);
	}

	/**
	 * @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 cn.itcast.chapter05.cookie;

import java.io.IOException;
import java.util.Date;

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 LastAcess
 */
@WebServlet("/LastAcess")
public class LastAcess extends HttpServlet {
    
    
	private static final long serialVersionUID = 1L;
       
    

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		response.setContentType("text/html;charset=utf-8");
		Cookie[] cookies=request.getCookies();
		
		String lasttime=null;
		for(int i=0;cookies!=null && i<cookies.length;i++) {
    
    
			String name=cookies[i].getName();
			if("lastAccess".equals(name)) {
    
    
				lasttime=cookies[i].getValue();
			}
		}
		if(lasttime==null) {
    
    
			response.getWriter().println("第一次访问网站");
		}else {
    
    
			response.getWriter().println("你上次访问的时间是:"+lasttime);
		}
		String time =String.format("%tF%<tF",new Date());
		Cookie cookie=new Cookie("lastAcess",time);
		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 cn.itcast.chapter05.session;

public class Book {
    
    
	private String id;
	private String name;
	public Book() {
    
    
		
	}
	public Book(String id, String name) {
    
    
	
		this.id = id;
		this.name = name;
	}
	public String getId() {
    
    
		return id;
	}
	public void setId(String id) {
    
    
		this.id = id;
	}
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	
	

}

package cn.itcast.chapter05.session;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class BookDB {
    
    
	private static Map<String,Book> map = new 	LinkedHashMap<String,Book>();
	static{
    
    
		map.put("1", new Book("1","javaWeb"));
		map.put("2", new Book("2","jdbc入门"));
		map.put("3", new Book("3","java基础"));
		map.put("4", new Book("4","struts框架"));
		map.put("5", new Book("5","hibernate框架"));
		
	}
	//1.得到所有图书
	public static Collection<Book> getAll(){
    
    
		return map.values();
	}
	//2.根据map的key,也就是图书的id,得到某本图书
	public static Book getBook(String id){
    
    
		return map.get(id);
	}
	
	
}

package cn.itcast.chapter05.session;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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 CartServlet
 */
@WebServlet("/cart")
public class CartServlet extends HttpServlet {
    
    
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CartServlet() {
    
    
        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;charset=utf-8");
		
		PrintWriter out = response.getWriter();
		List<Book> cart=null;
		
		HttpSession session = request.getSession(false);
		
		boolean cartflag=true;
		if(session==null) {
    
    
			
			cartflag=false;
		}else {
    
    
			
			cart = (List<Book>) session.getAttribute("cart");
			
			if(cart==null) {
    
    
				cartflag=false;
			}
		}
		
		
		
		if(!cartflag) {
    
    
			
			out.print("对不起,请前往购买图书");
		}else {
    
    
			
			
			out.print("购买图书如下:"+"<br/>");
			
			for(Book b:cart) {
    
    
				
				out.print("购买图书:"+b.getName()+"<br/><br/>");
			}
		}
		
		
		
	}

	/**
	 * @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 cn.itcast.chapter05.session;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ListBookServlet
 */
@WebServlet("/list")
public class ListBookServlet extends HttpServlet {
    
    
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListBookServlet() {
    
    
        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;charset=utf-8");
		
		Collection<Book> books = BookDB.getAll();
		
		
		PrintWriter out = response.getWriter();
		out.print("2020080605048+周敏"+"<br/>");
		out.print("本网站");
		
		for(Book b:books) {
    
    
			String name = b.getName();
			String id = b.getId();
			String url="<a href='purcharse?id="+id+"'>点击购买</a>";
			out.print("图书名称:"+name+"  "+url+"<br/><br/>");
		}
		
		
		
		
	}

	/**
	 * @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 cn.itcast.chapter05.session;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class PucharseServlet
 */
@WebServlet("/purcharse")
public class PucharseServlet extends HttpServlet {
    
    
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PucharseServlet() {
    
    
        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;charset=utf-8");
		
		String id = request.getParameter("id");
		if(id==null) {
    
    
			
			response.sendRedirect("/chapter05/list");
			
			return;
			
		}
		
		
		Book book = BookDB.getBook(id);
		//用session来实现购物车
		
		
		HttpSession session = request.getSession();
		
		
		List<Book> list = (List<Book>) session.getAttribute("cart");
		
		if(list==null) {
    
    
			
			list = new ArrayList<Book>();
			
			session.setAttribute("cart", list);
		}
		
		//不是第一次来添加id
		
		list.add(book);
		
		
		//返回前端
		
		
		Cookie cookie = new Cookie("JESSIONID",session.getId());
		
		
		response.addCookie(cookie);
		
		
		//跳转最后一个页面,展示
		
		response.sendRedirect("/chapter05/cart");
		
	
		
	}

	/**
	 * @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);
	}

}
```![请添加图片描述](https://img-blog.csdnimg.cn/cb6da2b5fa044791a36298fece4ebcda.PNG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pWP5YS_5ZGo,size_20,color_FFFFFF,t_70,g_se,x_16)

![请添加图片描述](https://img-blog.csdnimg.cn/4ac18bba34b343c0966ab1b9a3367d43.PNG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pWP5YS_5ZGo,size_20,color_FFFFFF,t_70,g_se,x_16)
#####   大数据2005 周敏 2020080605048

猜你喜欢

转载自blog.csdn.net/qq_54262540/article/details/121358691
今日推荐