缓存池
堆内存当中的字符串常量池。
- “abc” 先在字符串常量池中查找,如果有,直接拿来用。如果没有则新建,然后再放入字符串常量池。
堆内存当中的整数型常量池。
- [-128 ~ 127] 一共256个Integer类型的引用,放在整数型常量池中。没有超出这个范围的话,直接从常量池中取。
连接池(Connection Cache)
- 这里所说的连接池中的连接是java语言连接数据库的连接对象:java.sql.Connection对象。
- JVM是一个进程。MySQL数据库是一个进程。进程和进程之间建立连接,打开通道是很费劲的。是很耗费资源的。怎么办?可以提前先创建好N个Connection连接对象,将连接对象放到一个集合当中,我们把这个放有Connection对象的集合称为连接池。每一次用户连接的时候不需要再新建连接对象,省去了新建的环节,直接从连接池中获取连接对象,大大提升访问效率。
- 连接池
- 最小连接数
- 最大连接数
- 连接池可以提高用户的访问效率。当然也可以保证数据库的安全性。
线程池
- Tomcat服务器本身就是支持多线程的。
- Tomcat服务器是在用户发送一次请求,就新建一个Thread线程对象吗?
- 当然不是,实际上是在Tomcat服务器启动的时候,会先创建好N多个线程Thread对象,然后将线程对象放到集合当中,称为线程池。用户发送请求过来之后,需要有一个对应的线程来处理这个请求,这个时候线程对象就会直接从线程池中拿,效率比较高。
- 所有的WEB服务器,或者应用服务器,都是支持多线程的,都有线程池机制。
缓存数据库
redis
域对象
application域
- 对应的类名:ServletContext
- 定义和作用
- 创建:由服务器创建的唯一一个
- 作用:给所有的用户都公共享有的区域
- 建议:不要常用,因为多个用户都可以访问
- service方法调用:直接this.getContext()方法就可以调用应用域
- 常用的方法
- setAttribute(向域当中绑定数据)
- getAttribute(从域当中获取数据)
- removeAttribute(删除域当中的数据)
- getContextPath (获取应用的根路径)
- getInitParameter (通过初始化参数的name获取value)
- getInitParameterNames (获取所有的初始化参数的name)
session域(cookie的子效果)
- 对应的类名:httpsession
- 定义和作用
- JSESSIONID=xxxxxx 这个是以Cookie的形式保存在浏览器的内存中的。浏览器只要关闭。这个cookie就没有了。
- 物理上是通过本地存放cookie来实现的,但逻辑上是用户的一次完整的服务器访问
- 在service中调用:在request对象中直接调用request.getsession()
- 典型的例子:登录使用web程序
- 常用的方法
- setAttribute(向域当中绑定数据)
- getAttribute(从域当中获取数据)
- removeAttribute(删除域当中的数据)
request域
- 对应的类名:httprequest
- 定义和作用
- 就是一次请求所拥有的东西
- 本质上就是客户端向服务器的请求所包含的所有内容
- 服务器sevlet程序可以向其中取数据,偶尔也会向其中存数据,这一般体现在程序转发上
- 常用的方法
- setAttribute(向域当中绑定数据)
- getAttribute(从域当中获取数据)
- removeAttribute(删除域当中的数据)
本地缓存机制
cookie
- cookie的意义
- cookie和cookie保存的session就是为了保存会话的状态
- 在B/S结构中,都是一次次的请求,所以需要记录上一次的会话
- 每一次request请求都会带上这个路径上的cookie
- 可以通过request请求来找到该路径下的所有cookie
- 一个cookie的必要属性
- cookie的有效时间
- cookie的path(path下的所有路径)
- cookie中存储的数据 (Name–Value)
- 通过request找到一个路径下的所有cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
String name = cookie.getName();
String value = cookie.getValue();
}
}
Cookie cookie = new Cookie("token",token);
cookie.setMaxAge(60);
cookie.setPath("/");
response.addCookie(cookie);
- 通过response删除或更新一条路径下的cookie
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0){
for (Cookie cookie : cookies) {
if ("token".equals(cookie.getName())){
cookie.setMaxAge(0);
cookie.setPath("/");
Cookie cookie1 = new Cookie("token",cookie.getValue());
cookie1.setMaxAge(60);
cookie1.setPath("/");
response.addCookie(cookie);
response.addCookie(cookie1);
}
}
}