NOTE

来源:互联网 发布:摇滚音乐淘宝网 编辑:程序博客网 时间:2024/05/22 15:46
  1. 框架学习
  2. 后端学习
  3. 前端学习

网络结构

TCP/IP

学习路线:

  • Servlet/Httpservlet (javax.servlet-api)
  • Tomcat (Http请求过程)
  • Spring Web
  • Spring WebMVC
  • Dubbo
  • Kafka
  • Angular

Java Web

1.1、Servlet/Httpservlet

Servlet –> ServlertRequest –> ServletResponse –> ServletContext –> GenericServlet –>Filter
HttpServlet –> HttpServletRequest –> HttpServletResponse –> HttpSession
第一次学Servlet编程,学java web的时候,还没有那么多框架。我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根据需要重写一下doGet,doPost方法,跳转到我们定义好的jsp页面。Servlet类编写完之后在web.xml里注册这个Servlet类。启动web服务器,在浏览器中输入地址就ok.
1)ServletContext:是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。
2)Servlet上下文:Servlet上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同一服务器的Servlet有时会共享资源,如JSP页面、文件和其他Servlet。

1.2、Tomcat

Tomcat 的总体结构
我们将 Tomcat 中 Connector、Container 作为一个整体比作一对情侣的话,Connector 主要负责对外交流,可以比作为 Boy,Container 主要处理 Connector 接受的请求,主要是处理内部事务,可以比作为 Girl。那么这个 Service 就是连接这对男女的结婚证了。是 Service 将它们连接在一起,共同组成一个家庭。
从 Service 接口中定义的方法中可以看出,它主要是为了关联 Connector 和 Container.
Tomcat 中 Service 接口的标准实现类是 StandardService 它不仅实现了 Service 借口同时还实现了 Lifecycle 接口,这样它就可以控制它下面的组件的生命周期了。
 StandardService 的类结构图
主要是 setContainer 和 addConnector,addService 方法


Connector :负责接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理这个请求的线程,处理这个请求的线程就是 Container 组件要做的事了。
Connector
Container:是容器的父接口,所有子容器都必须实现这个接口,Container 容器的设计用的是典型的责任链的设计模式,它有四个子容器组件构成,分别是:Engine、Host、Context、Wrapper,这四个组件不是平行的,而是父子关系,Engine 包含 Host,Host 包含 Context,Context 包含 Wrapper。通常一个 Servlet class 对应一个 Wrapper,如果有多个 Servlet 就可以定义多个 Wrapper,如果有多个 Wrapper 就要定义一个更高的 Container 了,如 Context.
Container
Container

1.3、Spring WebMVC

1.3.1、启动过程

Java Web启动过程 –> Spring WebMVC启动过程
web.xml 的加载顺序是:context-param -> listener -> filter -> servlet –> spring
(tomcat容器将转化为键值对,并交给ServletContext–>listener, filter 等在初始化时会用到这些上下文中的信息)
继承结构
- HttpServletBean: 初始化的工作,将web.xml中配置的参数设置到Servlet中.
- FrameworkServlet: 将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。
- DispatcherServlet: 初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等.
流程

1.3.2、DispatchServlet

框架
- doService:
- doDispatch:
doDispatch
DispatchServlet

1.3.3、处理请求过程

SpringMVC处理视图请求过程:
- 请求首先被DispatcherServlet截获,DispatcherServlet通过handlerMapping获得HandlerExecutionChain,然后获得HandlerAdapter。
- HandlerAdapter在内部对于每个请求,都会实例化一个ServletInvocableHandlerMethod进行处理,ServletInvocableHandlerMethod在进行处理的时候,会分两部分别对请求跟响应进行处理。
- 之后HandlerAdapter得到ModelAndView,然后在方法processDispatchResult中做相应的处理。

1)处理请求的时候:会根据ServletInvocableHandlerMethod的属性argumentResolvers(这个属性是它的父类InvocableHandlerMethod中定义的)进行处理,其中argumentResolvers属性是一个HandlerMethodArgumentResolverComposite类,这个类是实现了HandlerMethodArgumentResolver接口的类,里面有各种实现了HandlerMethodArgumentResolver的List集合。
HandlerMethodArgumentResolverComposite
2)处理响应的时候:会根据ServletInvocableHandlerMethod的属性returnValueHandlers(自身属性)进行处理,returnValueHandlers属性是一个HandlerMethodReturnValueHandlerComposite类,这个类是实现了HandlerMethodReturnValueHandler接口的类,里面有各种实现了HandlerMethodReturnValueHandler的List集合。
3)@RequestBody:在RequestResponseBodyMethodProcessor中进行处理,根据http请求头部的contentType然后选择合适的消息转换器进行读取(消息转换器只有默认的那些跟部分json以及xml转换器)。
RequestResponseBodyMethodProcessor
消息转换器
4)@RequestMapping:RequestMappingInfo类封装了各种请求映射条件并实现了RequestCondition接口的类。
- consumes: request的提交内容类型content type,如application/json, text/html
- headers: http request的请求头
- params: http request parameter
- Patterns: url,就是注解value中的配置
- produces:返回的内容类型的contenttype,当request请求头中的(Accept)类型中包含该指定类型才返回
- requestMethods: http method,如GET,POST,PUT,DELETE等外观类:
- RequestConditionHolder:不知道具体是RequestCondition哪个子类时.自定义的条件,使用的这个进行封装
结构
RequestMappingInfo
5)处理视图对象processDispatchResult
本类render方法中调用view接口的render方法进行页面渲染
processDispatchResult

render

1.3.4、Interceptor

拦截器:HandlerExecutionChain

1.4、Spring boot

1.4.1、源码

Dubbo

2.1 源码

Kafka

3.1 源码

前端

4.1 Angular