Spring MVC基础
适配器模式:
- web应用和servlet:之间的协议:http;
- servlet和Java web:之间的规范:servlet;
- 使用一个适配器接口或者抽象类,进行适配连接;
- 利用重载方法进行保护其他方法,避免被重载;
模板方法设计模式:
- 核心算法骨架被定义并且final不可被修改【通常是抽象类中的核心算法】;
- 具体的实现步骤,由子类实现【增强代码复用】;
Servelet规范【由Tomcat服务器启动的时候创建】:
-
ServletConfig:一个Servlet对象对应一个ServletConfig,是Servlet对象的配置信息;
public String getInitParameter(String name); public Enumeration<String> getInitParameterNames(); public ServletContext getSerContext(); public String getServletName(); //同时使用适配器模式,仅需要继承Generate类继承了Servlet接口; -
httpServletRequest【接口,是规范中的一员】
-
httpServletRequest接口时继承自ServletRequest接口;
-
由Web服务器,实现,创建对象【面向接口编程,关注其中有哪些方法】;
- 由web服务器将遵循http协议的请求进行解析,然后将数据封装到request对象中,因此根据开发者只需要关注,request有哪些方法就可以了;
-
面向请求对象和响应对象的编程【面向接口的编程】;
- 请求和响应的对象声明周期极短;
-
常用方法:
- 底层通过Map<String, String[]>进行数据存储;
- 有两种数据:
- 用户提交的数据url中的数据;
- 请求域中绑定的数据【作为一个缓存使用】;
String getParameter(String name); //获取第一个元素 Map<String, String[]> getParameterMap(); Enumeration<String> getParameterNames(); String[] getParameterValues(String name); RequestDispatcher getRequestDispatcher(String path); //请求转发器的获取,进行转发【不会再url上显示转发】;path以不加项目名的/开始;
-
-
ServletContext:对于一个webApp,只有一个ServletContext【共享】,相当于整个xml配置文件,应用级对象【应用域】;
-
相当于一个缓存,使用键值对的底层机制;
public String getPath(String path); //以web为根路径; public String getRealPath(String);//绝对路径; //缓存方法 public void setAttributr(String name, Object value); public Object getAttribute(String name); public void removeAttribute(String name);
-
-
目前接触的缓冲机制:
- 内存中的字符串常量池:字面量字符串先去常量池中查找,如果有,直接用,否则新建,然后放入字符串常量池中;
- 整数型常量池:【-128- 127】一共258个Integer类型的引用;
- 连接池:数据库的连接池;
- 线程池:多线程的使用;
- redis:缓存数据库;
- ServletContext:应用域;
- http中的get具有缓存;
- 任意一个get请求的都会被缓存起来;
- 一个get请求路径,对应 一个资源;
- 先从缓冲中查找,然后在从服务器中获取;
-
Tomcat服务器日志:
- 服务器终端java运行程序的控制台信息【终端日志】;
- ServletContext对象的log()方法记录的日志信息【log方法日志】;
- 访问日志信息【访问日志】;
-
Http协议【共同规范:超文本传输协议】:
- http的请求协议:
- 请求行
- 请求方式
- uri
- 协议版本号;
- 请求头
- 空白行【分割头和体】
- 请求体
- POST和GET方法有区别;
- 请求行
- http的响应协议:
- 状态行
- 协议版本号;
- 响应状态码;
- 状态描述信息;
- 响应头
- 空白行【分割头和体】
- 响应体
- 状态行
- http的请求协议:
-
资源的跳转:
- 转发:
- 本质上是一次请求,由服务器自动向相同项目的其他资源再次发出请求,两者是共同的请求对象和响应对象;
- 可以将一个资源通过请求对象的Cache带到另一个对资源中;
- 同时前端服务器,是不知道转发的操作【是一次请求】;
- 整个过程中,请求方法相同;
- 本质上是一次请求,由服务器自动向相同项目的其他资源再次发出请求,两者是共同的请求对象和响应对象;
- 重定向:
- 本质上是多次请求,由服务器告知前端资源路径【包括项目名】,然后前端自动再次发起请求;
- 是前端发起的,每次请求对象和响应对象都不同【前端地址栏会发生变化】;
- 当资源在其他项目时,必须重定向;
- 前端通过地址栏进行重新请求,所以是get方法请求;
- 两者之中,刷新地址栏,由会形成一次请求【转发容易发出过多的请求,比如数据插入等】;
- 只有当请求作为Cache时,作为转发,否则使用重定向;
- 转发:
JSP:
-
是一套javaEE的13个子规范之一,所有web前端都遵守这套规范;
-
实际是一个翻译引擎,将jsp内容翻译为java语言,然后将编译为class,最后执行,其中java语言主要是继承了HttpServlet类;
-
翻译的内容主要在Servlet的Service方法中;
-
前端和后端的连接;
-
因为html只能是静态的网页,无法做到动态变换;
-
因此使用java做数据处理【通过请求方法】,转发,使用jsp做动态页面展示【通过Service方法】;
-
Session:
-
会话在服务端存在一个java对象叫:session;
-
一个会话包含多次请求和响应;
-
Http是一种无状态协议,Session是为了保留会话状态;
- Context【应用域】:生命周期太长;
- Request【请求域】:生命周期太短;
- Session【会话域】:保留会话状态;
- 在域中可以Cache数据;
-
Session是web项目的一个规范;
- 类似于redis的有超时的键值【id - value】对;
- 第一次请求时,服务器会创建对应的session对象,并将id发送给游览器【第二次不会】,且保存在内存中;
- 当关掉游览器时,内存中的id会被清理;
- 第二次请求时,会自动将id发送给服务端,服务器端进行查询对应的session;
- cookie: JSESSIONID=""
- 存在的主要原因【Cache】:
- Session是存在于服务器端的会话【是实例化对象】;
- cookie是存在于用户端的会话;
- 存放于硬盘或者内存;
- 任意cookie都是由键值对组成 + 关联路径;
- 其中一个键值对是:Jsessionid;
- 两者都是http的协议的一部分;
- 游览器发送请求的时候,会自动携带该路径下【当前路径及其子路径】的cookie【自动】
- cookie的过期时间设置为:0,表示删除游览器对应的cookie;
- 默认关联路径:为当前路径的父路径,及其子路径;
- 存在的主要原因【Cache】:
jakarta.servlet.http.HttpSession;
-
-
URL重写机制:url/session;jseesionid=;
- cookie禁用了,采用URL重写,直接在URL连接中加入jseesion键值对;
-
Servlet域【范围从小到大】
-
页面域;
-
请求域;
-
会话域;
-
应用域;
${user}:从小到大的域中取数据,调用对应get和toString方法;
-
-
过滤器的生命周期和Servlet相同,是Servlet规范的一员;
- servlet对象在启动的时候,不会创建对象;
- filter对象则会在启动的时候创建【拥有方法相同】;
- 两者都是单例模式;
- filter对象的优先级比servlet优先级【类比于AOP的环绕通知】;
- 多个filter的先后顺序类似于栈的数据结构;
- 当没有指定顺序时,使用类名字符串的字典顺序进行先后执行;
-
责任链设置模式【在运行阶段动态的确定调用关系】:
- 编译阶段就确定了调用关系【对象或者方法】;
- 当改变顺序时,需要改源代码,违背了OCP原则;
- filter是在运行阶段动态确定调用关系;
- 怎么实现?调用顺序在xml配置文件中确定【filter偏向于配置文件,而不是注解】;
- 编译阶段就确定了调用关系【对象或者方法】;
-
Listener监听器,是Servlet规范的一员;
- 本质是Servlet留给开发人员的后门,在某个时刻执行某段代码;
- 类似于静态代码块,【在类加载的时候,有执行代码的需要时机】
- 监听类,由web服务器生成和创建【发成时机时候】。
- 会跟随被监听的对象一同创建【init】和销毁【destroy】;
- 通常使用用来判断条件,然后通过域传递数据;
- 本质是Servlet留给开发人员的后门,在某个时刻执行某段代码;

浙公网安备 33010602011771号