tomcat认识
sun公司创立了javaEE规范,共13个,:JDBC,JNDI,EJB,RMI,JSP,Servlets,XML,JMS,Java IDL,JTS,JTA,JavaMail,JAF。就是定了一系列接口,想跟我玩,就要遵守我的规范,实现我的接口
tomcat实现了其中的servlet以及jsp规范
引用https://www.yuque.com/books/share/2b434c74-ed3a-470e-b148-b4c94ba14535/wmwbat
在javaweb开发中,我们没有写过与浏览器交互的代码,那么谁帮我们实现了?就是tomcat实现了,他解析http请求,构造request与response对象给我们使用,我们只需要根据request拿到浏览器给的信息,组装我们自己的数据,写到response中,Tomcat帮我们发到浏览器中展示。所以,我们用Java开发的Web应用只是一个半成品,类似于一个插件,而服务器则像一个收发器
引用https://www.yuque.com/books/share/2b434c74-ed3a-470e-b148-b4c94ba14535/wmwbat
coockie
起源:我们都知道,浏览器与服务器是基于http请求的,http请求是没有状态的(所谓没有状态就是说每一次浏览器发起http请求都是独立的,和之前的请求完全没有关系),这就会导致一些问题,比如客户刚刚登陆,跳转一个页面,请求是独立的话,服务器是不知道你有登陆过,会要求你再次登陆。。。
怎么解决呢?既然http请求是没有状态的,那么我们可以人为的使它有状态,当首次请求服务器的时候,服务器生成一些记录用户的信息给到浏览器,浏览器下次携带这些信息再次请求服务器,服务器就知道了是谁在请求自己,上面的问题也就迎刃而解了,这个服务器给浏览器的信息就存储在cookie中。
cookie也分为2种,一:会话cookie:浏览器关闭,内存中的cookie及被删除
二:持久性cookie:浏览器关闭,cookie也不删除,持久化到硬盘上了,什么时候删除呢,服务器生成cookie的时候可以人为的设置最大存活时间
session
起源:有了前面的cookie不是已经解决问题了吗?为什么还需要session? 仔细分析,cookie是有几个问题的,1.每次请求都需要带着这些信息,对网络是一个负担,2.信息放到cookie中,有些信息是用户的敏感信息,如果有些不怀好意的人。。。。为了解决这些问题。我们开始思考,既然信息本来就是服务器生成的,那么就没必要给全部的信息到浏览器了,给一个唯一标识不就好咯,所以有了session
浏览器请求服务器后,服务器把信息放到session中,并吧Jsessionid放到cookie中,传回给浏览器。第二次请求,浏览器拿着这个唯一id,服务器就知道你是谁了
服务器会永远保存session中的信息吗?当然不是,默认有个失效时间30min,。超过这个时间,直接把session失效掉。。。
session是在内存中的,如果大量的用户访问服务器,光是这些session内存也会吃不消的,这个时候怎么办呢?内存放不下,那就存到磁盘吧,哪里大,于是有了Session的钝化和活化,所谓session钝化,就是把长时间没有活动的session持久化到磁盘上。所谓活化,就是突然又来调用了,那就把持久化到磁盘的session再次加载到内存中,对于用户的使用来说是无感的。。
这里有一个问题。。现在服务器都不是一台,而是成千上万台,分布式下如果session存放在某一台服务器上,浏览器下次访问可不一定是同一台服务器,如果不是的话,那服务器可是没有用户的信息的,还会有同样的问题,这就是session共享问题,怎么办呢?最直观的办法 就是让他访问同一台服务器,基于hash计算浏览器地址,hash值一样的,打到同一台服务器上。 另外比较简单的就是借助第三方,比如redis,把session存储到redis中,所有请求都拿着jsessionId去redis中拿客户信息 还有一种方法比较不好,基于基于Tomcat的session复制。。。
上面内容基于语雀小册