目录
前言
1. 动态资源&静态资源
1.1 为什么要区分?
1.2 静态资源
1.3 动态资源
1.4 如何判断
2. Tomcat优先动态
2.1 原因
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值就是所对应的类对象。类对象是能够获取类信息的。
注意!!
类对象不是该类的对象,而是通过反射得到的,类对象也是可以创建对象的。
反射的三种方式:--获取类对象
Class clazz1=Class.forname("Demo");
Class clazz2=Demo.class;//类.class
Demo demo=new Demo();
Class clazz3=demo.getclass();//对象.getclass
System.out.println(clazz1==clazz2);
System.out.println(clazz2==clazz3);
结果是true,说明他们是同一个对象。
clazz1,clazz2,clazz3我们统称为类对象,类对象是能够获取类信息的。 反射是一种获取类信息的能力。类信息里有父类,子类,方法,变量,接口等。
小点:对象是堆里的一块内存空间
3. Tomcat运行项目的流程
Tomcat当中写了一个项目,这个项目当中,有10份servlet文件,有5份前端html文件。
由于默认优先访问servlet(动态资源),在起始阶段,访问这10份servlet,获取到@webservlet里的key值(访问地址),把它加载到动态资源的映射表,并且把当前该类转换成类对象,以value值的形式进行存储。
如此,当我们的请求打过来,和key值匹配,获取类信息进行输出。