文章目录前面的复习
我的tomcat路径D:java_developapache-tomcat-8.5.55
- Sevlet生命周期
- 部署JavaWeb项目
- Server.xml
- 容器
- 源码分析
- 对象属性图
servlet只会初始化一次,也就是整个过程中只存在一个servlet对象,即便是有多次访问,依然只有一个对象,这个对象是可以复用的
我想你一定会好奇这个servlet究竟是在什么时候创建的,所以就来讲一下servlet的生命周期
所谓的生命周期我们在java基础知识中一定也了解过,就是servlet类究竟在什么时候创建,调用了何种方法,最后在什么时候被销毁.
我们之前的对象都是自己手动创建,最后由JVM来销毁的,这就是普通Java对象的生命周期
而servlet的整个生命周期,都是由tomcat,也就是服务器控制的,在第一次访问路径对应的servlet的时候创建它,在服务器关闭时候销毁servlet
让servlet在服务器启动的时候就创建
servlet只有在第一次被访问的时候才会加载,这肯定会造成第一个访问的人访问时间较长,因为他需要等待servlet完成加载.那么,有没有什么方法能够使得servlet自动加载呢,就是在启动服务器的时候就将servlet加载起来呢?答案是有的,同样可以在web.xml中进行配置
部署JavaWeb项目1个javaweb项目经过idea编译后,在对应的out目录下面生成war_exploded目录
javaweb项目部署
打开01_tomcat_war_exploded,下图就是目录结构
其中原来的class文件放在了classes目录下面,当这个项目部署到tomcat, 项目的Web-INF目录下面的文件我们没法通过浏览器直接访问。外面的文件我们可以直接访问,例如通过http://localhost:8080/index.jsp访问index.jsp
部署这个项目有3个方法,
方法1:直接在idea中启动
方法2:将这个01_tomcat_war_exploded直接放到webapps, 通过cmd在命令行中输入:startup.bat,就会运行此项目。因为tomcat默认端口8080,浏览器输入
http://localhost:8080/01_tomcat_war_exploded/index.jsp访问就能访问01_tomcat_war_exploded目录下面的index.jsp文件
观察路径 http://localhost:8080/01_tomcat_war_exploded/index.jsp
其中01_tomcat_war_exploded对应项目文件夹的名字,如果更改文件夹的名字,访问路径也要随之改。
还有一种方式,我们可以把01_tomcat_war_exploded项目放到任何地方,比如我把它从webapps中移了出来,现在我再conf下面的server.xml中加入一个Context标签
指明我们的访问项目路径(path属性)和项目位置(docbase属性),现在我访问index.jsp路径是http://localhost:8080/mytomcat/index.jsp
Server.xml总结:项目文件夹放在webapps下面或者Context方式指定位置
为啥webapps目录下的项目直接就部署了,理解这个问题之前先看看server.xml文件
文件在D:java_developapache-tomcat-8.5.55confserver.xml
有一个Host标签
name=域名
appbase=项目集合文件夹(为啥这么说?等会解释)
unpackWARs=true 自动解压war包
autoDeply=true 自动部署
当我们访问http://localhost:8080/01_tomcat_war_exploded/index.jsp,tomcat最先通过域名Host找到appbase即webapps, 然后找到01_tomcat_war_exploded文件夹,再找到文件夹下面的index.jsp
如果在appbase下面找不到项目,就会寻找Context标签,这意味着我们的Context属于Host, 即Host可以管理很多Context, 再想一想,Context其实是一个项目,一个项目中有多个Servlet, 这些Servlet才是我们自己写的


