【Tomcat】第二站:Tomcat通过反射机制运行项目

目录

前言

[1. 动态资源&静态资源](#1. 动态资源&静态资源)

[1.1 为什么要区分?](#1.1 为什么要区分?)

[1.2 静态资源](#1.2 静态资源)

[1.3 动态资源](#1.3 动态资源)

[1.4 如何判断](#1.4 如何判断)

[2. Tomcat优先动态](#2. Tomcat优先动态)

[2.1 原因](#2.1 原因)

[3. Tomcat运行项目的流程](#3. Tomcat运行项目的流程)


前言

我们在写项目时,在进行前后端交互时,都会创建一个servlet,然后让他继承HttpServlet。

一般还需要发送过来请求方式:get/post

以及url如何写:http://localhost:8080/Lojarro/DelUserSession 来访问当前的地址。

就是说,在**@webservlet中规定了访问路径**。

在上一博客中,我画过这一流程图。Tomcat第一站

http请求发送过来时,要区分想要的是html页面(静态资源)还是servlet资源(动态资源)。


1. 动态资源&静态资源

1.1 为什么要区分?

如果是静态页面会直接将文件内容呈现给客户端(浏览器),如果是动态页面会将其解析成静态内容之后再呈现给客户端(浏览器)。

1.2 静态资源

通常是以html、htm、shtml等结尾的文件,所有数据都是写在文件里的。

客户端加载静态页面时,无须对数据库进行操作,直接将文件内容呈现出来。

优点 :相对于另外两种页面(动态页面和伪静态),速度最快,不需要从数据库里面提取数据,也不会对服务器产生压力。

缺点 :由于数据都是写在文件里,很有可能会导致文件非常大,占用大量的服务器磁盘空间,每次添加内容都会生成新的文件。++更改源代码的话必须全部更改++,而不能更改一个地方,全站的静态页面就自动更改了。

1.3 动态资源

通常是以php、jsp、asp等结尾的文件,不是独立存在于服务器上的网页文件,当用户请求时服务器才会返回一个完整的网页。

数据都是存储在数据库中,根据用户发出的不同请求从数据库里提取不同的数据,从而提供个性化的网页内容。

优点 :占用磁盘空间小,一般几万条数据的网站,文件大小可能只有几M。数据都是从数据库里提取出来,如果需要修改某些数据,可直接修改数据库,所有动态页面就都会自动更新。

缺点 :相对于静态页面而言,访问速度较慢,因为++动态页面需要处理成静态内容,才能呈现给用户++。动态页面的数据是从数据库里提取出来的,如果访问量大的话,会导致数据库的压力很大。现在动态网站多数都使用了缓存技术,但相对于静态网站而言,服务器的压力比较大,访问的人越多服务器的压力越大。

1.4 如何判断

不是动态资源,就是静态资源。或者说先在动态资源里找,没有就从静态资源找,都没有的话返回404。


2. Tomcat优先动态

2.1 原因

因为在Tomcat里有一个动态资源的映射表。(key-value类型的数据,key值就是@webservlet里的值,value值就是所对应的类对象。类对象是能够获取类信息的。

注意!!

类对象不是该类的对象,而是通过反射得到的,类对象也是可以创建对象的。

反射的三种方式:--获取类对象

java 复制代码
Class clazz1=Class.forname("Demo");

Class clazz2=Demo.class;//类.class

Demo demo=new Demo();
Class clazz3=demo.getclass();//对象.getclass
java 复制代码
System.out.println(clazz1==clazz2);
System.out.println(clazz2==clazz3);

结果是true,说明他们是同一个对象。

clazz1,clazz2,clazz3我们统称为类对象,类对象是能够获取类信息的。 反射是一种获取类信息的能力。类信息里有父类,子类,方法,变量,接口等。

++小点:对象是堆里的一块内存空间++


3. Tomcat运行项目的流程

Tomcat当中写了一个项目,这个项目当中,有10份servlet文件,有5份前端html文件。

由于默认优先访问servlet(动态资源),在起始阶段,访问这10份servlet,获取到**@webservle**t里的key值(访问地址),把它加载到动态资源的映射表,并且把当前该类转换成类对象,以value值的形式进行存储。

如此,当我们的请求打过来,和key值匹配,获取类信息进行输出。

相关推荐
TT哇6 分钟前
【多线程案例】:单例模式
java·单例模式·面试
黄焖鸡能干四碗25 分钟前
智慧教育,智慧校园,智慧安防学校建设解决方案(PPT+WORD)
java·大数据·开发语言·数据库·人工智能
lssjzmn33 分钟前
Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
java·前端·后端·springboot·异步·接口优化
new_daimond1 小时前
二级缓存在实际项目中的应用
java
一只乔哇噻1 小时前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
User_芊芊君子1 小时前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
2301_803554521 小时前
正向代理,反向代理,负载均衡还有nginx
java·nginx·负载均衡
要开心吖ZSH1 小时前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
向上的车轮1 小时前
基于Java Spring Boot的云原生TodoList Demo 项目,验证云原生核心特性
java·spring boot·云原生
程序员清风2 小时前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
java·后端·面试