javaweb2
缓存机制有哪些?
-
堆内存当中的字符串常量池。
-
“abc”先在字符串常量池中查找,如果有,则直接拿来用。没有则新建,再放入到字符串常量池中。
-
-
堆内存中的整数型常量池。
-
[-128~127]一共256个Integer类型的引用,放在整数型常量池中。没有超出这个范围的话,直接从常量池中取。
-
-
连接池(Connection Cache)
-
这里说的连接池中的连接是Java语言连接数据库的连接对象:java.sql.Connection对象。
-
JVM是一个进程,MySQL也是一个进程。进程和进程之间建立连接,打开通道是很耗费资源的。所以可以先提前创建好N个Connection连接对象,将连接对象放到一个集合中,我们把这个放有Connection对象的集合称为连接池。每一次用户连接的时候不需要再新建连接对象了,省去了新建的环节,直接从连接池中获取连接对象,大大提升了访问效率。
-
连接池
-
最小连接数
-
最大连接数
-
连接池可以提升用户的访问效率,也可以保证数据库的安全性。
-
-
-
线程池
-
Tomcat服务器本身就是支持多线程的。
-
Tomcat启动服务器的时候,会先创建好N个线程Thread对象,然后将线程对象放到集合中,称为线程池。用户发送请求过来之后,需要有一个对应的线程来处理这个请求,这个时候线程对象就会直接从线程池中拿,效率比较高。
-
-
redis
-
NoSQL数据库、非关系型数据库、缓存数据库。
-
向ServletContext应用域中存储数据,也等于是将数据存放到缓存cache当中了。
-
HTTP协议
-
什么是HTTP协议?
-
HTTP协议:是W3C制定的一种超文本传输协议
-
W3C:
-
万维网联盟组织
-
负责制定标准的:HTTP、HTML4.0、HTML5.0、XML、DOM等规范都是W3C制定的。
-
万维网之父:蒂姆-伯纳斯-李
-
-
-
HTTP协议包括:
-
请求协议:
-
浏览器 向 服务器发送数据,叫做:请求(request)
-
包括四部分:
-
请求行
-
请求头
-
空白行
-
请求体
-
-
-
响应协议:
-
WEB服务器 向 浏览器发送数据,叫做:响应(response)
-
包括四部分:
-
状态行
-
响应头
-
空白行
-
响应体
-
-
-
请求行的三部分:
-
第一部分:请求方式(7种)
-
get(常用)
-
post(常用)
-
delete
-
put
-
head
-
options
-
trace
-
-
第二部分:URI
-
什么是URI?统一资源标识符。代表网络中的某个资源的名字。但是通过URI是无法定位资源的。
-
什么是URL?统一资源定位符。代表网络中的某个资源,同时,通过URL是可以定位到该资源的。
-
URI和URL是什么关系?有什么区别?
-
URL包括URI
-
/servlet/index.html 这是URI
-
-
-
第三部分:协议版本号
-
-
状态行分三部分:
-
第一部分:协议版本号
-
第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码)
-
200表示请求响应成功,正常结束。
-
404表示访问的资源不存在,通常是因为路径写错了,或者路径写对了,但是服务器对应的资源并没有启动成功。(404是前端错误)
-
405表示前端发送的请求方式和后端请求的处理方式不一致时发生:
-
比如:前端是POST请求,后端的处理方式按照GET方式进行处理,发生405
-
比如:前端是GET请求,后端的处理方式按照POST方式进行处理,发生405
-
-
500表示服务器端的程序出现了异常。一般会认为是服务器端的错误导致的。
-
-
第三部分:状态的描述信息:
-
ok 表示正常成功结束
-
not found 表示资源找不到
-
-
-
-
怎么向服务器发送GET请求,怎么向服务器发送POST请求?
-
到目前为止,只有一种情况可以发送post请求:使用form表单,并且form标签中的method属性值为:method="post"。
-
其它所有情况都是get请求:
-
在浏览器地址栏上直接输入URL
-
在浏览器上直接点击超链接
-
使用form表单提交数据时,form标签中没有写method属性,默认就是get
-
... ...
-
-
-
GET请求和POST请求的区别?
-
get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加了一个 ?,?后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在 “请求行” 上发送数据)
-
post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上,也就是说post发送的数据,在浏览器上看不到。(post在 “请求体” 当中发送数据)
-
get请求只能发送到普通的字符串。并且发送的字符串长度有限制,不通的浏览器限制不同。
-
get请求无法发送大量数据。
-
post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。
-
post请求可以发送大数据量,理论上没有长度限制。
-
get请求比较适合从服务器端获取数据。
-
post请求比较适合向服务器端上传数据。
-
get请求是安全的,因为get请求只是为了从服务器上获取数据,不会对服务器造成危险。
-
post请求是危险的,因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器中,服务器是很危险的。另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post请求。
-
get请求支持缓存
-
任何一个get请求最终的 “响应结果” 都会被浏览器缓存起来。
-
一个get请求路径 对应 一个资源。
-
实际上,只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。
-
-
post请求不支持缓存
-
因为post缓存没有意义。
-
-
-
GET请求和POST请求如何选择?什么时候用GET请求,什么时候用POST请求?
-
怎么选择GET请求和POST请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想从服务路上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。
-
大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据是收集用户的信息,一般是需要传给服务器,服务器将这些数据保存/修改等。
-
如果表单中有敏感信息,还是建议适用post请求,因为get请求会回显敏感信息到刘览器地址栏上。(例如:密码信息)
-
做文件上传,一定是post请求。要传的数据不是普通文本。
-
其他情况都可以使用get请求。
-
不管你是get清求还是post浦求,发送的清求数据格式是完全相同的,只不过位置不同,格式都是统一的:
-
name=value&name=value&name=value&name=value
-
name是什么?
-
以form表单为例:form表单中input标签的name。
-
-
value是什么?
-
以form表单为例:form表单中input标签的value。
-
-
-
模板方法设计模式
-
什么是设计模式?
-
某个问题的固定的解决方案。(可以被重复使用)
-
-
有哪些设计模式?
-
GoF设计模式:
-
通常我们所说的23种设计模式。(Gang of Four:4人组提出的设计模式)
-
单例模式
-
工厂模式
-
代理模式
-
门面模式
-
责任链设计模式
-
观察者模式
-
模板方法设计模式
-
....
-
-
JavaEE设计模式:
-
DAO
-
DTO
-
VO
-
pojo
-
...
-
-
-
什么是模板方法设计模式?
-
在模板类的模板方法中定义核心算法骨架,具体的实现步骤可以延迟到子类当中完成。
-
-
模板类通常是一个抽象类,模板类当中的模板方法定义核心算法,这个方法通常是final的(不是必须的,只是为了防止子类继承从而修改算法)
-
模板类当中的抽象方法就是不确定实现的方法,这个不确定怎么实现的事交给子类去做。
HttpServlet源码分析
-
HttpServlet类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。
-
HttpServlet在哪个包下?
-
jakarta.servlet.http.HttpServlet
-
-
到目前位置我们接触了servlet规范中的哪些接口?
-
jakarta.servlet.Servlet 核心接口
-
jakarta.servlet.ServletConfig Servlet配置信息接口
-
jakarta.servlet.ServletContext Servlet上下文接口
-
jakarta.servlet.ServletRequest Servlet请求接口
-
jakarta.servlet.ServletResponse Servlet响应接口
-
jakarta.servlet.ServletException Servlet异常(类)
-
jakarta.servlet.GenericServlet 标准通用的Servlet类(抽象类)
-
-
HTTP包下都有哪些接口类和接口?jakarta.servlet.http.*;
-
jakarta.servlet.http.HttpServlet(HTTP协议专用的servlet类,抽象类)
-
jakarta.servlet.http.HttpServletRequest(HTTP协议专用的请求对象)
-
jakarta.servlet.http.HttpServletResponse(HTTP协议专用的响应对象)
-
-
HttpServletRequest对象中封装了什么信息?
-
HttpServletRequest,简称request对象。
-
HttpServletRequest中封装了请求协议的全部内容
-
Tomcat服务器(web服务器)将 “请求协议” 中的数据全部解析出来,然后将这些数据全部封装到request对象当中。也就是说只要面向HttpServlitRequest,就可以获取请求协议中的数据。
-
-
HttpServletResponse对象是专门用来响应HTTP协议到浏览器的。
-
HttpServletRequest接口中有哪些常用方法?
-
//获取前端浏览器用户提交的数据: Map<String,String[]> getParameterMap();//这个是获取map Enumeration<String> getParameterNames();//这个是获取map集合中所有的key String[] getParameterValues(String name);//根据key获取map集合的value String getParameter(String name)//获取value这个一维数组当中的第一个元素。(最常用) //以上4个方法,和用户提交的数据有关系 //eg: Map<String,String[]> parameterMap = request.getParameterMap(); //通过key获取value String username = request.getParameter("username"); String password = request.getParameter("password"); //复选框时调用 String[] interests = request.getParameterValues("interest"); System.out.println(username); System.out.println(password); for(String interest : interests){ System.out.println(interest); }
-
-
request对象实际上又称为 “请求域” 对象。
-
应用域对象是什么?
-
ServletContext(Servlet上下文对象)
-
什么情况下会考虑向ServletContext这个应用域当中绑定数据?
-
第一:所有用户共享的数据。
-
第二:这个共享的数据量很小。
-
第三:这个共享的数据很少的修改操作。
-
在以上三个条件满足的情况下,使用这个应用域对象,可以大大提高我们的执行效率。
-
实际上向应用域中绑定数据,就相当于把数据放到了缓存(Cache)当中,然后用户访问的时候直接从缓存中取,减少IO操作,大大提升系统的性能,所以缓存技术是提高系统性能的重要手段。
-
//ServletContext当中有三个操作域的方法:(四个域共享方法) void setAttribute(String name,Object obj);//向域当中绑定数据 Object getAttribute(String name);//从域中根据name获取数据。 void removeAttribute(String name);//将域当中绑定的数据移除
-
-
-
-
request和response对象的生命周期
-
request对象和response对象,一个是请求对象,一个是响应对象。这两个对象只在当前请求中有效。
-
一次请求对应一个request。
-
N次请求则对应N个request。
-
- 点赞
- 收藏
- 关注作者
评论(0)