JAVA-WEB目录(许令波版)

2020-07-21  本文已影响0人  我是小曼巴

第一章 深入Web请求过程

B/S网络架构概述

如何发起一个请求

Http解析

DNS域名解析

CDN工作机制

第二章 Java I/O的工作机制

Java的I/O类库的基本架构

磁盘I/O工作机制

网络I/O工作机制

NIO的工作方式

IO调优

设计模式:适配器模式

设计模式:装饰器模式

第三章 Java Web的中文编码问题

几种常见的编码格式

在Java中需要编码的场景

在Java Web中涉及的编解码

在JS中的编码问题

第四章 Javac编译原理

Javac编译器的基本结构

Javac工作原理分析

设计模式:访问者模式

第五章 深入class文件结构

JVM指令集

class文件结构

第六章 深入分析ClassLoader工作机制

ClassLoader类结构分析

ClassLoader的等级加载制度(双亲委派机制)

如何加载class文件

  1. 加载:加载字节码到内存(findClass)
  2. 验证:字节码验证
  3. 准备:类数据结构准备和内存分配
  4. 链接:符号表链接
  5. 初始化:静态属性,类属性的初始化

常见的加载类错误

Tomcat类加载机制

  1. Tomcat目录结构
  1. Tomcat服务器的类加载架构


实现类的热部署

第七章 JVM体系结构与工作方式

JVM体系结构

JVM工作机制

第八章 JVM内存管理

物理内存与虚拟内存

内核空间与用户空间

Java中哪些组件需要使用内存

JVM内存结构

JVM内存分配策略

JVM内存回收策略

内存问题分析

第九章 Servlet工作原理分析

Servlet容器

        Tomcat tomcat = new Tomcat();
        File appDir = new File(getBuildDirctory(), "webapps/examples");
        // Host host, String contextPath, String docBase
        tomcat.addWebapp(null, "/example", appDir.getAbsolutePath());
        // 启动tomcat
        tomcat.start();
        // 调用Servlet 
        ByteChunk res = getUrl("http://localhost:" + getPort() + "/examples/servlets/servlet/HelloWorldExample");
        assert(res.toString().indexOf("<h1>Hello World!</h1>") > 0);

1)添加web应用:tomcat.addWebapp
创建一个与此web应用对应的StandardContext容器,并将此容器添加到父容器Host中;创建StanardContext容器之后,会为此容器添加一个LifecycleListener对象:contextConfig,此contextConfig负责整个web应用的配置解析工作。
2)启动tomat容器:tomcat.start()
Tomcat的启动逻辑是基于观察者模式设计的,所有的容器都会继承Lifecycle接口,它管理着容器的整个生命周期,所有容器的修改和状态的改变都会由它通知已经注册的观察者(Listener)。所以Tomcat容器的启动,会一层层激发子容器的LifecycleEvent。Tomcat启动类的时序如下:Tomcat,StandardServer,StandardService,StandardEngine,StandardHost,StandardContext,ContextConfig,Connector,Http11Protocal,MapperListerner;我们需要重点关注StandardContext容器的启动过程。
3)StandardContext容器的启动过程
执行ContextConfig的init方法:解析配置文件

解析默认的context.xml配置文件
解析默认的Host配置文件
解析默认的Context自身的配置文件
设置Context的DocBase

执行StandardContext的startInternal方法:

创建读取资源文件的对象
创建ClassLoader对象
设置应用的工作目录
启动相关的辅助类,如logger,realm,resources等
修改启动状态
子容器初始化
获取ServletContext并设置必要的参数
初始化"load-on-startup > 0" 的Servlet

执行ContextConfig的configureStart方法:完成Web应用的初始化工作

解析各级web.xml文件,包括globalWebXml,hostWebXml,web应用的web.xml。
然后将解析的对象属性设置到Context容器中,包括创建Servlet对象、filter、listerner。
Servlet对象被包装成StandardWrapper并作为子容器添加到Context容器中。

Servlet工作原理

第10章 深入理解Session与Cookie

第11章 Tomcat的系统架构与设计模式

第12章 Jetty的工作原理解析

第13章 Spring框架的设计理念与设计模式分析

HelloInterface hello = new Hello();
InvocationHandler invocationHandler = new ProxyHandler(hello);
HelloInterface proxyHello = (HelloInterface) Proxy.newProxyInstance(hello.getClass().getClassLoader(), 
                                              hello.getClass().getInterfaces(), invocationHandler);
proxyHello.sayHello();

被代理对象:hello,实现了HelloInterface的sayHello()方法;

代理对象:proxyHello,由Proxy.newProxyInstance方法构造,接收参数为ClassLoader、被代理的接口、方法调用处理器;ClassLoader用于加载代理类,通常和被代理类是同一个ClassLoader;被代理的接口即HelloInterface;方法调用处理器是一个实现了InvocationHandler接口的类,代理对象调用被代理接口中的方法时,实际上就是由invocationHandler对象调用InvocationHandler接口中唯一的方法invoke()去处理。

方法调用处理器:ProxyHandler类接收被代理对象作为构造器的唯一参数,实现了InvocationHandler接口的invoke()方法。此方法就是所有被代理对象方法的实际执行程序,通过反射调用被代理对象的方法,并可以在方法调用前后加入我们的逻辑,这也是代理的最终目的。

public class ProxyHandler implements InvocationHandler{
    private Object object;
    public ProxyHandler(Object object){
        this.object = object;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before invoke "  + method.getName());
        method.invoke(object, args);
        System.out.println("After invoke " + method.getName());
        return null;
    }
}

2)Spring AOP如何实现
https://www.cnblogs.com/xuyatao/p/8485851.html
https://juejin.im/post/5af3bd6f518825673954bf22

第14章 Spring MVC的工作机制与设计模式

Spring MVC的总体设计

https://www.cnblogs.com/kanglijun/p/10553994.html

Control设计

Model设计(https://blog.csdn.net/en_joker/article/details/81903403)

ModelAndView对象是连接业务逻辑层与View展现层的桥梁,对于Spring MVC来说它也是连接Handler和View的桥梁。ModelAndView对象持有一个ModelMap对象和一个View对象,其中ModelMap对象就是执行模板渲染时所需要的变量所在实例,如JSP通过request.getAtrribute(String)获取的变量,Velocity中context.get(String)获取的变量。
参考:[https://blog.csdn.net/en_joker/article/details/81903403]

View设计

对Spring MVC的View模块来说,它由两个组件支持,分别是RequestToViewNameTranslator和ViewResolver。
1)RequestToViewNameTranslator:支持用户自定义对ViewName的解析,如将请求的ViewName加上前缀或者后缀等。
2)ViewResolver:根据用户请求的ViewName创建合适的模板引擎来渲染最终的页面,ViewResolver会根据ViewName创建一个View对象,调用View对象的void render(Map model, HttpServletRequest request, HttpServletResponse response)方法渲染页面。
上面提到的模板引擎有FreeMarkerViewResolver,InternalResourceViewResolver,VelocityViewResoler。其中InternalResourceViewResolver就是JSP的ViewResolver。
参考:https://blog.csdn.net/en_joker/article/details/81903797

设计模式-模板模式

模板模式的核心是,大的逻辑已经定义,你要做的就是实现一些具体步骤。

第15章 深入分析iBatis框架之系统架构与映射原理

iBatis框架主要的类层次结构

iBatis框架的设计策略

iBatis框架的运行原理

iBatis对SQL语句的解析

数据库字段映射到Java对象

设计模式解析之简单工厂模式

第16章 Velocity工作原理解析

Velocity总体架构

JJTree渲染过程分析

Velocity作为模板语言,其核心在于模板文件(.vm)的解析,构建AST抽象语法树。Velocity的解析器是通过JavaCC构建的,JavaCC有一个扩充支持分析树或AST抽象语法树的生成,就是jjTree。

事件处理机制

常用优化技巧

与JSP比较

设计模式之合成模式

合成模式又叫做部分整体模式,它通常把对象的关系映射到一棵树中,利用树的枝干和叶子节点来描述单个对象和组合对象,从而构建统一的操作这些对象的接口,使得访问对象的方式更加简单。
https://www.cnblogs.com/SamFlynn/p/4501227.html

设计模式之解释器模式

就是将带有一定文法的语句解析成特定的数据结构,并提供一种解释功能,使得能够解释这个语句。
https://www.cnblogs.com/adamjwh/p/10938852.html

上一篇 下一篇

猜你喜欢

热点阅读