Servlet

Servlet

一. xml技术

xml定义 : 可扩展标记语言 (html/xml)

1.xml的作用
 1. 数据传输 (基本上没有 用json替代)
 2. 存储数据 (可以存储复杂的数据)
 	propertes文件 只能存储 简单的数据, 数据库配置文件
 	xml的运用 配置文件的使用 ,web.xml 的使用
2.xml的基本语法
    xml的标签都是自定义
    	所有 XML 元素都须有关闭(结束)标签
    XML 标签对大小写敏感
    XML 必须正确地嵌套顺序
    XML 文档必须有且只有一个根元素
    XML 的属性值须加引号

    <?xml version="1.0" encoding="UTF-8"?> xml的版本信息头
3.xml的约束
     xml的标签限制: 
	  1. DTD 约束 
	       <!ELEMENT students (student*) >   <!-- students 中可以使用多个 student -->
			<!ELEMENT student (name,age,sex)>  <!-- student 中可以有name和 age sex元素 -->
			<!ELEMENT name (#PCDATA)>    <!-- name 可以有内容  -->
			<!ELEMENT age (#PCDATA)>
			<!ELEMENT sex (#PCDATA)>
			<!ATTLIST student number #REQUIRED>
			
			<!DOCTYPE students SYSTEM "student.dtd"> <!-- 添加xml的约束文件  dtd -->
			
	  2. XSD 是DTD的升级版 
	       dtd约束的问题? 为什么要用 xsd 来替代 dtd 
		       dtd约束 无法对数据进行 约束
4.xml的解析
 xml的解析:
    把xml中的标签中的内容读取出来 
	
	xml解析方法: 
	   dom解析 
	   sax解析 
	   pull解析 
	   dom4j解析 等等
	   dom4j解析 好多第三方框架都是用这个 dom4j解析 需要jar包
 

二. Web

1.Web相关的概念
	  1. 软件架构的分类: 
	      c/s   客户端/服务器     客户端:需要安装软件的程序(QQ,微信) 
		  b/s   浏览器/服务器     早前的软件都是b/s(09之前 淘宝/网易...)
  
          b(浏览器) + c(手机app)/s    淘宝 / 京东/12306 
		  
		  b/s架构只关心  服务器 (搞好服务器就好)
		                 升级 (只需要升级 服务器 )
						 没有cs安全 (使用爬虫 容易获取数据)
						 
		  c/s            客户端和服务器都要做好 
						 客户端和服务器 和服务器都要升级 
						 安全  (QQ 的数据很安全 )
              
   	  2. 资源分类
            静态资源:  所有用户访问后,得到的结果都是一样的,称为静态资源.
			静态资源可以直接被浏览器解析
			   例子: html/css/js 
            
            动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。
			动态资源被访问后,需要先转换为静态资源,在返回给浏览器
               例子: java中 动态资源  jsp/servlet 
                   
       3. 网络通信三要素
	     ip: 电子设备(计算机)在网络中的唯一标识。192.168.0.101 
		 端口:应用程序在计算机中的唯一标识。 0~65536   1521 (oracle)  3306myqsl  8080 tomcat   
                 
		 协议:规定了数据传输的规则
		   1. 基础协议:
			  1. tcp:安全协议,三次握手。 速度稍慢
			  2. udp:不安全协议。 速度快             
2.服务器

定义:安装了服务器软件的计算机

作用:
		web服务器软件:接收用户的请求,处理请求,做出响应。
	   	在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
	   
web容器:
       常见的java相关的web服务器软件:
	   webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
	   webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
	   JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
	   Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。

       JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
3.Tomcat
Tomcat的安装: 
	  1. 下载 tomcat  
	       下载网址: https://tomcat.apache.org/download-90.cgi
	  2. 解压 tomcat  
	       apache-tomcat-9.0.24-windows-x64.zip 解压文件  
		   单独放在一个 没有中文 没有 空格的文件夹中 
		   
		   找到解压路径:
		   找bin文件 
		       win启动文件是:   startup.bat 
			   linux启动文件是: startup.sh 
                   
            启动: 启动一闪而过( 原因没有配置环境 )        
                   
	  3. 环境配置   
	     找到环境变量设置位置: 
		 这个路径到 jdk下面就可以 不要加 bin目录 
		 创建一个环境变量: JAVA_HOME=C:\Program Files\Java\jdk1.8.0_201
		 
	  4. 启动服务: 
	       找到安装目录: 
		      startup.bat  双击启动就可以 
			浏览器发送请求: http://localhost:8080/    可以看到页面 
			
		问题: 
		   1.java的jdk删除 配置JAVA_HOME 不能访问 
		   2. localhost是本机地址 相当于输入本机的ip 
		   3. 把服务器软件tomcat 关闭了 访问没有结果 
		
        tomcat关闭: 
         关闭服务器: 
            shutdown.bat  
			
	   tomcat的文件夹: 
   	      bin/   存放启动关闭的执行文件 
		  conf/  存放配置文件 
		          server.xml 服务器配置文件 
	      lib	  存放javajar的位置 

		  logs   日志文件夹 
		  
	      temp   临时文件 
		  
		  webapps   web项目发布到服务器上的 位置 
		           项目发布都放在webapp这个目录下面 
	               root项目是tomcat默认自带的项目 
	               examples 案例项目  
		  work      目录: 把jsp代码 和 jsp编译后的代码 放在 work目录下面 

		 
		tomcat启动报错的2中情况: 
          1. 一闪而过  没有配置环境 		
	        这个路径到 jdk下面就可以 不要加 bin目录 
		    创建一个环境变量: JAVA_HOME=C:\Program Files\Java\jdk1.8.0_201
			
	      2. 启动报错 (启动报错 8080 端口占用 )
	         1. 查看logs里面的日志信息 (端口占用 )
			Caused by: java.net.BindException: Address already in use: bind
	         2. 查端口被占用的程序: 
			      cmd  查看端口情况的命令:  netstat -ano 
				  找到 8080 端口的程序pid (程序id): ???
             3.找到程序 管理器 找到 pid=??? 这个程序 关闭它 
			 
			 4.再次启动  tomcat端口不会被占用 
			 
		tomcat关闭: 
            shutdown.bat  (推荐) 			
				  
        tomcat的项目部署: 
		  tomcat项目部署是 
		   1. 把 项目打包成war格式(要使用专业的打包工具 eclipse/idea) ,放到webapps中 
		   2. tomcat会自动解压 war 可以访问; 
		
		hello--->压缩  hello.zip  把zip改成 war 格式 可以直接解压  
		hello--->压缩  hello.rar  把rar格式改成  war格式  不能解压
4.数据交互
	协议:     
	   客户端(浏览器)和服务器!协议理解成双方通信的格式!
	    
	http协议: 
      超文本传输协议 (规定了浏览器和 服务器数据之间的交互格式 )

    http协议特点: 
	    1. http 协议格式:2个 
		        请求协议:    浏览器发送数据到服务器的格式 
			    响应协议:    服务器发送数据到浏览器的格式 
			   
		2. http无状态 (浏览器和服务通信后会断开, 不会记住对象) 节约内存开销 
5.请求协议

概述:浏览器发送数到服务器的格式

 请求协议的格式:      
		1. 请求首行 
		     请求方法  请求url         请求协议版本
		       GET      /aaa/index.jsp   HTTP/1.1 
     
		2. 请求头 
		        User-Agent 把电脑的系统信息 浏览器信息发送到服务 
				Accept:    告诉服务器  我接受那些文档数据  
				          一般都是 text/html ;xml;imge   
				Accept-Language: 告诉浏览器 我接受的 语言 zh-cn (中文)
                Accept-Encoding: 告诉浏览器我接受的数据压缩格式:gzip ... 
		        Accept-charset:  高速浏览器  我接受的数据编码格式  
				Connection: keep-alive: 支持连接的方式(3秒后断开)
				
		    空行 
                    
		3. 请求体 (正文) 
		      get请求 没有请求体   (get请求 请求参数在请求的url后面)
			  post请求 有请求体    (请求提交的数据)
6.响应协议

概述:服务器发送到浏览器的数据格式

   响应协议的格式: 
	    1.  响应行 
		    HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200(表示请求成功),OK是对状态码的解释;
		
		2.  响应头信息 
		     Server: Apache-Coyote/1.1: 服务器的信息 
			 Content-Type: text/html;charset=UTF-8:
			 响应体的类型 和 使用的编码为UTF-8;
			   告诉浏览器 我们响应类型是 text/html 
			   告诉浏览器我的编码是utf-8  (utf-8 解析我们数据编码)
			 Content-Length: 724:响应体为724字节 
             Date  服务响应的 时间  			
			   
		    空行 
		3.  响应体 	
	          html / 或者  text 

	   常见的响应码: 
	      200   成功 
		  302   重定向 
		  404   找不到  
		  500   服务异常

三. Servlet

定义:Sun(Oracle)公司制定的一种用来扩展Web服务器功能的组件规范

概述:servlet 是运行在 Web 服务器中的小型 Java 程序

​ servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求

1.serlvet的特点
       1. 是web的小程序 (serlvet 不能单独 使用必须要依赖 web服务器(tomcat))

       2. 是处理 网页的 请求 和 响应 
   
       3. servlet  是接口是规范 
2.搭建环境
	  1. 创建一个web项目( 动态web项目 )
	  2. 需要把eclipse 和 tomcat 进行关联 
	  3. 通过 eclipse把 项目发布到 tomcat容器中 
	  
例子:serlvet入门程序: 
	   1. 创建java类 实现 serlvet 接口 
	      问题? 1. eclipse 无法找到 serlvet 接口
		  解决: 我们没有添加服务器 运行环境 
		     选中项目---> buidler path --->config --->add libar
			 --->server runtime (服务器运行环境)
   
       2. 重写接口中的方法   
	        serlvet是接口 (5个抽象方法)
			service() 时提供servlet服务的方法 ()  每次请求都会执行的方法 

       3. 配置serlvet 到 web.xml 中 
	        <servlet>
			<!-- servlet 类名 -->
				<servlet-name>demo01</servlet-name>
			<!-- servlet 全路径 -->
				<servlet-class>cn.szsxt.demo01.HelloServlet</servlet-class>
			</servlet>

			<!-- servlet 映射 -->
			<servlet-mapping>
				<servlet-name>demo01</servlet-name>
				<url-pattern>/aaa</url-pattern>
			</servlet-mapping>

       4. 访问serlvet 程序  

             localhost:8080/day01_web/demo01
3.servlet 介绍
 1.serlvet 是接口 继承结构:2个抽象类: 
        GenericServlet (了解)
        HttpSerlvet(抽象类)

        结论: 实现serlvet开发 有3中方式: 	 实现接口 serlvet  
        继承 GenericServlet(了解)  HttpSerlvet(推荐使用这个方式开发serlvet)
        
 2. serlvet 的方法:
      5个方法: 
         3 个方法是 生命周期 (创建到销毁的过程)
         init()    初始方法 (第一次访问  tomcat 初始化init方法是 只初始化一次)
         service() 服务器的方法  (浏览器每次访问都会执行 这个方法) 
         destory() 服务器关闭后 会移除servelet对象 (销毁) 

         其他2 个方法是获取 servlet信息方法 
         servletconfig  
         可以获取初始化参数  
         获取servlet的名称
         
 3. serlvet接口的 实现类  	GenericServlet(抽象类)
         1.如果我们使用servlet 接口来实现 serlvet 会自动重写5个方法 
         使用 GenericServlet 可以少写几个方法
         编写一般的 servlet,只需重写抽象 service 方法即可 
         
 4. httpservlet  抽象类 	是 GenericServlet 的子类 
         HttpServlet 是处理web项目的http请求 , HttpServlet 的子类至少必须重写一个方法
         ,子类至少必须重写方法,(doget/dopost)
        httpservlet 重写了 service 进行http处理  会调用具体的 (doXXX方法)

        步骤:
        1. 继承 httpservlet (推荐使用这种方式) 
        2. 重写 doget /dopost 方法
        3. web.xml 的配置 
        4. 项目的发布    
        
5.servlet 细节 
    1.   <load-on-startup>1</load-on-startup> 解决我们服务器启动后 servlet就启动 
        配置一个 >0 正整数 

    2.servlet 的url的配置 

      1.全路径匹配  
        访问路径必须和 url配置的路径一致 
        /abc/a 
        一个servlet可以配置多个 url   

      2.扩展名匹配 
        以 .do 或者 .action结尾  只要是以扩展名结尾的都可以访问

      3. 通配符 
        / *                 
            

注意:

项目启动就报错的处理: 
	    1. 一般都是web.xml 配置错误 
		    1. class 找不到  
			2. url 配置出问题 (url 配置 重名了  url 配置非法 (/ 省略))
	    
		2. tomcat不编译 java 代码 
		     1. tomcat的关闭  把tomcat中发布的项目 移除 
			 2. eclipse 工作空间进行 清理 (clear) 
			 3. eclipse 重启 
			 4. 电脑重启
4.servletcontext

作用: 实现servlet和servlet容器数据通信

特点: 
        1. servletcontext 的生命周期,和 tomcat 共生命周期
        2.一个web项目只有一个servletcontext
        3. 实现serlvet中数据共享
        
      1. 如何获取servletContext 对象 
            1.  可以通过 servletconfig 来获取		
			2.  可以通过 httpServlet中 有个 getServletcontext()
        
      2. 域对象: (域对象 可以实现多个servlet数据共享 域对象)
		   servletcontext可以实现域对象 
		   
		 数据共享: 
		    设置数据: servletcontext.setAttribute("key",value);
		    获取数据: servletcontext.getAttribute(key);
			
			key 是字符串类型 如果有重复 就覆盖  
			value是obj类型可以共享所有的数据
5.serlvet的响应

概述:服务器回写给浏览器的数据

响应对象 reponse对象: 
		ServletResponse   servlet 将响应发送到客户端的对象
    	HttpServletResponse 扩展 ServletResponse 接口以提供特定于
    	HTTP 的发送响应功能
		   
		   
1.可以设置响应码 
		
		setStatus(int sc) ; 可以给浏览器设置响应码 
		//设置响应码 
		// resp.setStatus(303);
		
		//设置响应码和报错信息   如果报错 4 开头都是 找不到 
		resp.sendError(404, "兄弟 不要找资源 ");

		如果不设置 请求成功后  系统会默认设置  200  请求成功 	
		   
2. 设置响应头信息 
		
		//设置响头 
		
        //resp.setIntHeader(name, value);  设置这些头信息 毫无意义    
		resp.setHeader("aa", "11");
		resp.setHeader("name", "root");  // 可以在浏览器查看响应头  
		
		//设置有意义的头信息 
		// date 的头信息设置   响应时间  
		resp.setHeader("date", "2018-8-8");
		// 设置 响应的数据类型和 编码 
		resp.setHeader("context-type", "text/html;charset=utf-8");
		
		//设置编码
		resp.setCharacterEncoding("utf-8");
		//设置 响应类型 
		resp.setContentType("text/html");
		
		// 把编码 和 响应类型 放在一起设置  推荐使用    
		resp.setContentType("text/html;charset=utf-8");
		
3. 重定向: 重新定位资源 
    
        代码实现重定向:
			//设置 302
			setStatus(302);
			//设置 重定向
			setHeader("location","重定向的url路径");
			
			//设置 302
			resp.setStatus(302);
			
			// location 的url  可以设置 内部 的 url   /项目名称 + /req03
			//                 可以设置 外部的url    百度(http://www.baidu.com )
			//  的相对路径 tomcat的路径 
			//	resp.setHeader("location", "/web02/req03");
			
			// 简单实现重定向 
			// 内部封装  setStatus(302) 和  setHeader("location", "/web02/req03");
			resp.sendRedirect("/web02/req03");
			
			用法: 如果登录用户或者密码错误 ... 重定向到登录界面  
			
			特点: 
			    1. 访问了服务器 2(效率低)
				2. 访问后 浏览器地址发生改变  
				3. 可以访问服务器本地 url,也可以访问外部的 url 
		
4. 设置响应体 
		     1. 设置 文本响应 (text/html)
			     获取输出流: 
				 getWrite() 返回可将字符文本发送到客户端(浏览器)的 PrintWriter 对象。
				             getWrite 默认编码是 ios-8859-1
				 
				// 设置 响应体  (把字符串 回写 到 浏览器 ) text/html
				response.getWriter().write("hello welcome");
				// 响应html 浏览器会自动 解析 html 
				response.getWriter().write("<h1>hello welcome</h1>");	
							 
			 2. 设置  byte[] 字节码 
				// 获取输出内容  
				ServletOutputStream sos = response.getOutputStream();
				
				//输出 二进制 byte[] 
				String msg = "hello";
				sos.write(msg.getBytes());
				sos.close();
				   
				// 边读边写 
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new 				  File(srcPath)));
				
				byte [] by = new byte[1024];
				int len = 0;
				while ((len = bis.read(by)) != -1) {
					sos.write(by, 0, len);
				}
				
				sos.flush();
				bis.close();
				sos.close();

5. 乱码处理  
		  resp.setContentType("text/html;charset=utf-8");
6.serlvet请求的获取
request对象: 
       		ServletRequest 接口:  定义将客户端请求信息提供给某个 servlet 的对象
            HttpServletRequest 接口:  HTTP servlet 提供请求信息
            请求协议中的请求行,请求头 ,请求体数据都封装在  HttpServletRequest这接口中
            
1. request 对象可以获取请求方法 和 头信息 
			    // 获取请求方法  
				String method = request.getMethod();
				System.out.println(method);
				
				// 获取头信息 
				String accept = request.getHeader("Accept");
				System.out.println(accept);
				String Host = request.getHeader("Host");
				System.out.println(Host);
				
				// 获取其他的数据 
				//获取uri  (/web02/req01)  /项目名称/请求url
				String requestURI = request.getRequestURI();
				System.out.println("uri=>" + requestURI);

				// 获取的url (协议/ip/端口/服务器的路径)
				StringBuffer requestURL = request.getRequestURL();
				System.out.println("url=>" + requestURL.toString());
				
				//获取上下文路径     结果:/项目名称
				String contextPath = request.getContextPath();
				System.out.println("contextPath:" +contextPath);
            
2. 获取请求参数: 
			    req.getParameter("name") 获取请求的数据 name 为 请求数据的key 
                    如果  key 没有数据 返回 null
		          
		        req.getParameterValues("fav"); 可以 提交的数组      
		    
		        req.getParameterMap()  可以直接获取所有的请求参数: 封装到一个map中 
					
3. req请求参数转成 bean对象 
			    
                //beanutils 需要导入jar包    
				//通过beanutils 直接把  Map 中数据转成 users对象 
				User user = new User();
				
				try {
					BeanUtils.populate(user, map);
				} catch (Exception e) {
					e.printStackTrace();
				}
			
4.请求转发
                定义: 访问aserlvet 不知道结果 直接转发bServlet,  b给你返回结果 			
	            
				如何实现请求转发: 
				//1.  获取请求分发器  RequestDispatcher  \bservlet转发路径
				RequestDispatcher dispatcher = req.getRequestDispatcher("\bservlet");
				// 2. 请求转发 
				dispatcher.forward(req, resp);
				// 如果是 请求转发  转发的 servlet 不能做 回写操作 可以在req中设置 头信息、数据
				
				特点: 
					1. 请求转发 只能进行 内部转发   
					2. 请求转发  浏览器的url 不会发生改变 
					3. 效率比重定向高  

                把请求转发和重定向进行对比: 
					1. 浏览器上的路径   
                          重定向  url会发生改变     请求转发  url不发生改变 
				 	
					2. 效率问题: 	  
						  重定向: 请求2次 效率低    请求转发:  请求1次  效率高 
						  
					3.  访问的范围: 
						   重定向  可以内部,可以外部 重定向    请求转发: 只能外部转发  
				
				选择问题? 
				    1. 请求转发的页面显示 重定向都可以(不能有数据传输)
					2. 重定向可以访问外部url (如果显示外部页面(百度) 必须用 重定向)
						   
						  
				请求包含:  多个servlet 完成我们响应 
                aservlet 可以设置 响应体 bServlet 可以设置响应体 
    				 
5.请求转发数据传递 
			    域对象: 可以实现 多个servlet中的数据共享  
				servletContext  域对象: 
                    	servletContext.setAttribute("key",value);
						servletContext.getAttribute("key");
						
				request 也是域对象 也可以实现数据共享 		
				       设置数据: request.setAttribute("key",value);
					   获取数据: request.getAttribute("key");
			     
				域对象的数据作用范围: 
						servletContext域对象范围: 所有的web项目都可以获取 域对象 
						request域对象 范围: 只能是同一个请求 (请求转发)
						
			    request 域对象使用场景: 
				    请求数据: 
					     在Aservlet 中 执行 业务流程(获取数据)
						 可以把 数据 传递到 bservlet中(数据展示(xxx.jsp))            
7.serlvet 乱码处理
1.处理响应乱码: 
	resp.setContentType("text/html;charset=utf-8");

2. 请求乱码: 
    // 设置请求体的编码     
    // get 没有请求体  不需要设置     get不会出现乱码 
    // post 请求会乱码      设置请求头编码   utf-8
    req.setCharacterEncoding("utf-8");		

3.数据库乱码:  配置url中设置utf-8编码  3306masql的端口号   /db_test代表数据库名称
	url=jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=utf8
8.路径问题
1.客户端路径: 
	    a / 表单  / 重定向: 
		
		1. 绝对路径: http://localhost:8080/web01/xxx/login   可以访问 
		2. 相对路径:  +/  (http://localhost:8080 相对服务器路径) /项目名称/xxx.html  /项目名			   称/login
	    3. 相对路径:  不加 /  相对当前的路径   (不推荐)
	   
2.服务器路径: 
	    /  相对当前的 项目的路径 
	    常见的是: 请求转发   /xxxx 资源 
	   
	    <url-pattern>路径
	     必须 + / 
		 / 是相对项目项目的 路径 
		 
		ServletContext获取资源 可以+ / 可以不加 / 
         都是 项目的根目录 
            如果要获取WEB-INF      /WEB-INF/xxx 	
            获取类资源下的路径     /WEB-INF/classes/xxx 

        Class获取资源
		   +    /   获取是(类的资源 )classes下面的 资源
		   不加 /   获取是(类的资源 下面的表的当前类的资源文件 )classes下面的包的类的资源

四. cookie

定义:Cookie 是网站用来在客户端保存识别用户的一种小文件

1.应用场景

cookie的应用场景:记录浏览商品。

2.cookie的创建
    new (name,value)
    服务器cookie的回写   resp.addCookie()  (会把cookie 保存在浏览器中)
    服务器获取cookie     req.getCookies()  返回的是数组 
        
	回写的cookie添加在  头信息中 : Cookie: key2=scott; key1=hello	
	头信息key是: Cookie  , value 是 cookie 键值对  (cookie 和 cookie之间用  ; 隔开 )      
3.cookie的生命周期
	设置cookie生命周期是: cookie.setMaxAge()   
	默认是  -1  浏览器关闭后 cookie 会自动消失		

	可以设置我们cookie 的生命周期 :cookie.setMaxAge();  单位是s

五. HttpSession

概述:提供一种方式,跨多个页面请求或对 Web 站点的多次访问标识用户并存储有关该用户的信息

	会话:一个用户对服务器的多次连贯性请求!所谓连贯性请求,
	就是该用户多次请求中间没有关闭浏览器!
	
	会话的范围: 会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!
	  
	
1. 会话的获取  req.getHttpSession(); 
	
2. 域对象:  可以实现servlet 数据共享 
	         session.setAttribute("key","value") 设置 
             session.getAttribute("key"); 获取  			  
	    
		 域对象数据对比: 
	         servletContext    在整个web项目中可以使用 
			 session           在会话中可以使用  (推荐使用 session ) 一般用户信息可以存到session 
			 request           在通一个请求中使用  	 
	
3. session的原理: 
	    浏览器访问服务器  创建了一个session, 把sessionId 存到 一个cookie中  把 cookie回写到浏览器 
		浏览器中存储了 sessionId, 下次访问的时候  浏览器把sessionid 带过来了  
		服务会通过sessionId找之前创建的session 
		
		1. 浏览器关闭后 session 消失没有? 
              浏览器 关闭后 浏览器端的 sessionid 丢失 去服务器中中找不到之前的session 
        2. session 的周期 : tomcat 默认是 30 min  
     
4. session的清理:
		invalidate();
			
		// sessionid 没有消失 没有 存储值 (可以理解 把数据注销了)
		session.setAttribute("key","value") 可以移除 session中存储的值 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值