1.一个请求进来,tomcat会为这个请求开启一个线程,专门去处理这个请求,同是也会获取到请求的信息,请求的路径,根据路径去寻找servlet对象,如果没有servlet对象就创建一个,该对象长期存储在内存中,因为是单例的,再判断该请求是不是第一个请求,如果是,则调用init()方法,然后调用servers(),如果不是则只调用servers();此处如果有多个人在请求这个servlet,那这么这个servlet就面临了线程安全问题,注意,多线程的时候如果servlet中有在增删全局变量,那么一定要记得加上同步锁。
1.安全问题
servlet是单例模式,只有一个对象,一个对象服务多个请求,也就是服务多个线程,这个时候就会造成多个线程共享对象,这个时候就会有安全问题,
2.让服务器启动的时候就创建servlet
我们之前说了servlet的生命周期,第一次访问servlet的时候,会创建servlet对象,调用init方法,再调用services方法,我们以后一般会在init()方法里面做一些初始化的操作,这样就会有一个问题,会造成第一次访问servlet的人需要消耗较长的时间,我们可以让服务器一启动,我们就创建servlet,就会调用init()方法,那我们就需要配置这个servlet,在web.xml里面配置
3<url-pattern> /AServlet</url-pattern >
这个是一个servlet对外访问的路径,可以随便写,但是客户端需要按照写的路径来访问。我们也可以为一个Servlet设置多个访问路径,还可以写通配符,如:
1)servlet/*;匹配servlet/后的任意路径
2)*.do;匹配所有以.do结尾的请求
3)/*;所有的路径都可以匹配
web.xml细节:
除了在每个项目中有一个xml之外,在tomcat的conf目录下也有一个web.xml文件,它是所有web.xml文件的根文件,项目中的web.xml都是继承它
servletContext对象(也称之为域对象,常用来在多个servlet中共享数据):
1.它代表的是servlet的上下文,代表的是servlet的运行环境,servlet是运行在一个项目里面的,这个对象代表的就是整个项目
2.一个项目有且只有一个servletContext对象
3.我们看这servletContext的生命周期,servletContext在tomcat一启动的时候就创建了这个对象,tomcat被关闭的时候servletContext就被销毁了
4.tomcat服务器为我创建了一个这样的对象,我们可以获取到这个对象,就是可以在我们的servlet里面获取到这个对象,我们可以在这个对象里面保存数据,假设我们访问Aservlet,就可以获取到servletContext对象,并在其中保存数据,我们再访问Bservlet,此时我们也可以在Bservlet中访问servletContext对象,我们在其他servlet中保存的数据可以在BServlet中访问。
获取应用初始化参数
1.我们之前可以获取某个servlet中的初始化参数,但是如何从一个servlet中获取另一个servlet中的初始化参数
2.在web.xml里面可以把局部的初始化参数提炼为全局的初始化参数,到时候就可以通过servletContext中获取
以上就是今天老师讲的知识点,总结的有点乱,以后要进一步梳的更有条理一些