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

相关推荐
*TQK*24 分钟前
C++范围基 for 循环
java·开发语言
myshare202226 分钟前
Java开发提速秘籍:巧用Apache Commons Lang工具库
java·开发语言
默辨26 分钟前
Reactive&Reactor Core
java·reactive·webflux·reactor core
egekm_sefg1 小时前
【JSqlParser】Java使用JSqlParser解析SQL语句总结
java·开发语言·sql
m0_748256782 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu
123yhy传奇2 小时前
【学习总结|DAY032】后端Web实战:登录认证
java·spring boot·学习·mybatis
好看资源平台2 小时前
Java Web开发高级——消息队列与异步处理
java
VX_CXsjNo13 小时前
免费送源码:Java+SpringBoot+MySQL SpringBoot网上宠物领养管理系统 计算机毕业设计原创定制
java·hadoop·spring boot·mysql·zookeeper·flask·pytest
Sunday_ding3 小时前
ros 机器人地图转化为gis地图
java·arcgis·图论
ChangYan.3 小时前
IDEA运行测试函数@Test注解旁边没有运行按钮
java