IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java Web day06 -> 正文阅读

[Java知识库]Java Web day06

五、会话及其会话技术

5.1 会话概述

(1)客户端请求Wob服务懈时,针对每次HTP请求,Web服务器都会创建一个HttpServletRequest对象,该对象只能保存本次请求所传递的数据。由于购买和结账是两个不同的请求,因此,在发送结账请求时,之前购买请求中的数据将会丢失。
(2)使用ServletContext 对象保存数据时,由于同一个Web应用共享的是同一个ServletContext对象,因此,当用户在发送结账请求时,由于无法区分哪些商品是哪个用户所购买的,而会将该购物网站中所有用户购买的商品进行结算,这显然也是不可行的。
为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。

5.2 Cookie 对象

Cookie是一种会话技术, 它用于将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。

5.2.1 什么是 Cookie

服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的Cookie遵循一定的语法格式。

Set-Cookie:user=itcast; Path=/;

在上述示例中,user表示Cookie的名称,itcast表示Cookie的值,Path表示Cookie的属性。需要注意的是,Cookie必须以键值对的形式存在,其属性可以有多个,但这些属性必须用分号和空格分隔。

5.2.2 Cookie API

为了封装Cookie信息,在Servlet API中提供了一个javax servlet Cookie类,该类包含了生成Cookie信息和提取Cookie信息各个属性的方法。
1.构造方法
Cookie类有且仅有一个构造方法。

public Cookie(java.lang.String name,java.lang.String value)

在Cookie的构造方法中,参数name用于指定Cookie的名称,value用于指定Cookie的值。需要注意的是,Cookie一旦创建,它的名称就不能更改,Cookie的值可以为任何值,创建后允许被修改。
2. Cookie类的常用方法
通过Cookie的构造方法创建Cookie对象后,便可调用该类的所有方法。
在这里插入图片描述

显示用户上次访问时间

package cn.itcast.chapter05.re;

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("/acess")
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().print("你是第一次访问本网站");
		}else {
			response.getWriter().print("你上次访问本网站的时间是:"+lasttime);
		}
		
		String time=String.format("%tF%<tT", new Date());
		Cookie cookie=new Cookie("lastAccess",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);
	}

}

在这里插入图片描述
在这里插入图片描述

5.3 Session对象

Cookie技术可以将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据的共享。但是,如果传递的信息比较多,使用Cookie技术显然会增大服务器端程序处理的难度,这时,可以使用Session技术。Session是一种将会话数据保存到服务器端的技术。

5.3.1 什么是Session

当人们去医院就诊时,就诊病人需要办理医院的就诊卡,该卡上只有卡号,而没有其他信息。但病人每次去该医院就诊时,只要出示就诊卡,医务人员便可根据卡号查询到病人的就诊信息。Session技术就好比医院发放给病人的就医卡和医院为每个病人保留病例档案的过程。当浏览器访问Web服务器时,Servet 容器就会创建一个Session对象和ID属性,其中,Session 对象就相当于病历档案,ID就相当于就诊卡号。当客户端后续访问服务器时,只要将标识号传递给服务器,服务器就能判断出该请求是哪个客户端发送的,从而选择与之对应的Session对象为其服务。
需要注意的是,由于客户端需要接收、记录和回送Session对象的ID,因此,通常情况下,Session是借助Cookie技术来传递ID属性的。

5.3.2 HttpSession API

Session是与每个请求消息紧密相关的,为此,HttpServletRequest定义了用于获取Session对象的getSession()方法,该方法有两种重载形式,具体如下。

publle HttpSession getSession (boolean create)
publie HttpSession getSession()

在这里插入图片描述
在这里插入图片描述

课堂示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	data.jps页面用来输出当前时间:
	<%out.print(new Date().toLocaleString()); %>
</body>
</html>

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%!
		int a=1;
		int b=2;
	%>
	<%!
		public String dashuju(){
			String str="dashuju";
			return str;
	}
	%>
	
	<%  out.print(a+b); %>
	<br/>
	<%  response.getWriter().print("huagong"); %>
	<br/>
	<%  out.print(dashuju()); %>
	<br/>
	<br/><br/><br/>
	<%=a+b %>
	<br/>
	<%=dashuju() %>
</body>
</html>

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	html内容
	<!-- html注释 -->
	
	<%
		//java注释
		System.out.print("java 注释");
	%>
	
	<%--jsp注释 --%>
	
</body>
</html>

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
大数据2005 <br/>2020080605012<br/>杨骏
	<% response.getWriter().print("化工");%>
</body>
</html>

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	我是include页面,下面是我包进来的页面:
	<%@ include file="date.jsp" %>
</body>
</html>

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		out.print("first line");
	
		response.getWriter().print("second line <br/> 2020080605012 杨骏<br/>");
	%>
</body>
</html>

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	HttpServletRequest req=(HttpServletRequest) pageContext.getRequest();
	//req.setAttribute("dashu", "huagong");
	
	pageContext.setAttribute("dashu11","pageContext",PageContext.PAGE_SCOPE);
	pageContext.setAttribute("dashu22","REQUEST",PageContext.REQUEST_SCOPE);
	pageContext.setAttribute("dashu33","SESSION",PageContext.SESSION_SCOPE);
	pageContext.setAttribute("dashu","APPLICATION",PageContext.APPLICATION_SCOPE);
	%>
	<%=pageContext.findAttribute("dashu") %>
	<hr/>
	<%=(String) req.getAttribute("dashu") %>
	
</body>
</html>

在这里插入图片描述
2020080605012

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:15:31  更:2021-11-20 18:17:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:16:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码