SpringMvc笔记

SpringMvc笔记一

Servlet相关内容

web服务器:把资源映射成url,可供公网访问。
那是如何做到映射关系? 实现方式很多,所以出现了servlet规范
处理流程:

1、接收请求
2、处理请求
3、响应请求
以tomcat为例:
tomcat,既是 web服务器,又是servlet容器。
tomcat将步骤 1 的请求封装为ServletRequest ,将步骤 3 的响应封装成 ServletResponse ,将容器封装为类ServletContext

Servlet 规范 javaWeb的核心规范(相当于接口定义)
SpringMvc笔记
上图就是java对servlet的定义,相当于生命周期:
创建 一般由servlet容器实现,tomcat
初始化 init 方法, ServletConfig 也是核心类,配置信息
service方法: 处理请求逻辑,由程序员实现,springmcv
destroy方法:销毁

GenericServlet 这个类,模版方法,主要就是将 ServletConfig对象从局部变量变成全局变量。
SpringMvc笔记

HttpServlet 继承了 GenericServlet 类,实现了service方法。
(自定义的servlet 一般继承 HttpServlet)

http里面最核心的几种请求类型:
SpringMvc笔记
关于web.xml文件,tomcat自带web.xml文件,
所以这时候需要了解下下面3哥概念:
DispatcherServlet springmvc的处理器
DefaultServlet(默认的,缺省):兜底,一般处理静态资源
jspServlet jasper 处理.jsp

在tomcat自带的web.xml 文件中配置了
SpringMvc笔记
SpringMvc笔记
前端控制器 配置 url_pattern
/ 拦截所有请求,会过滤 .jsp,不能访问
/* 拦截所有请求,包括.jsp
但是都不能访问静态资源,如果需要访问静态资源,那就需要交给 DefaultServlet 来处理,前端过滤器 需要配置特定规则,例如 *.xxx 。

classpath: class路径 (不找jar包)
classpath*:

Tomcat架构:通过观察server.xml得出
Server —> Service --> Connector(监听socket) 和 Engine —> context(servlet容器)
context 对应java 的StanderContext
Engine 对应Java 的 Container
Service 对应Java的 StanderService
Server 对应 Java的StanderServerSpringMvc笔记
addWebapp方法(只有servlet应用才调用):
1、创建了StandardContext,添加了LifecycleListener 监听器
2、创建了StandardHost
3、创建了StandardServer
4、创建了StandardService,并且添加到了StandardServer中
5、创建了StandardEngine ,并且添加到了 StandardService的Container中
6、将StandardHost 添加到 StandardEngine中
7、将StandardContext添加到了StandardHost中

start方法:
1、创建 Connector,添加到StandardService 中
2、startInternal()方法最重要,启动容器
从 server 开始,一直到 context,责任链模式或者模版方法吧
SpringMvc笔记
Connector.start() 方法,完成了socket监听(AprEnd pEndpoint)新版的用了NIO(NIOEndpoint)

反正就是 start() ,startInternal () 套娃调用
最后还是
SpringMvc笔记

最后通过 contextConfig 的configureStart 方法,解析web.xml 成url对象,通过url.resource方法生成WebXml对象。
然后把WebXml对象中的servlet封装成为Wapper对象 放到 ServletContext上下文中。

最后通过StandardWrapper(外观模式(将多个方法封装起来)),initServlet方法
SpringMvc笔记
以上就是servlet的初始化。
注:选择哪个servlet的init就是根据 监听socket,根据配置的web.xml 里面配置的url_patter 匹配到对应 servlet ,像springMvc的话就是 Servlet->GenericServlet->HttpServlet->HttpServletBean->FrameworkServlet->DispatcherServlet