【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值匹配,获取类信息进行输出。

相关推荐
better_liang5 小时前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
小江的记录本5 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
小马爱打代码6 小时前
Spring源码 第四篇:Spring 5 源码深度拆解:AOP 全流程核心原理
java·后端·spring
better_liang6 小时前
每日Java面试场景题知识点之-SpringBoot启动流程
java·面试·springboot·源码解析·启动流程
RyFit6 小时前
Java + AI 实战:Spring AI 从入门到企业级落地
java·人工智能·spring
ZhengEnCi7 小时前
01-如何监听接口调用情况?
java·spring boot·后端
JAVA面经实录9178 小时前
MyBatis学习体系
java·mybatis
java1234_小锋8 小时前
在 Spring AI 中如何实现函数调用(Function Calling)?请说明其基本原理和应用场景。
java·人工智能·spring
小马爱打代码9 小时前
Spring源码 第九篇:Spring 5 源码深度拆解 - Spring 事件驱动模型
java·后端·spring
ForgeAI码匠9 小时前
ForgeAdmin|Spring Boot 3 后台框架的自动配置设计:少写配置,多做组合
java·spring boot·后端