Servlet技术

Servlet(Server Applet),全称Java Servlet。绝大多数情况下只用来扩展基于HTTP协议的Web服务器。

工作原理

采用Tomcat作为Servlet的容器,为Servlet提供基本的运行环境。


web服务器挤到一个http请求时,web服务器会将请求提交给Servlet容器。Servlet容器首先对所请求的url进行解析,并根据web.xml配置文件找到相应的处理Servlet,同时将request、response对象传递给Servlet。Servlet通过request获取客户端请求者、请求信息以及其他信息。Servlet处理完之后,会将所有需要返回的信息放入response对象中并返回客户端。Servlet一旦处理完请求,Servlet容器就会刷新response对象,并将控制权重新交给web服务器。

当Servlet容器收到请求时,Servlet引擎会判断这个Servlet是否是第一次访问:如果是第一次访问,Servlet引擎调用init()方法初始化这个Servlet。

每个Servlet只被初始化一次,后续请求只是新建一个进程,再调用Servlet的service()方法。当多个用户请求同时访问一个Servlet时,Servlet容器负责为每一个Servlet启动一个线程。线程的启动和销毁由Servlet负责。

Servlet生命周期

加载、初始化、运行、销毁

加载阶段

web服务器启动时或请求Servlet服务时,Servlet容器通过java类加载器加载一个Servlet。只需加载一次,然后实例化该类的一个或多个实例。

初始化阶段

容器调用Servlet的init()初始化方法,进行Servlet初始化。完成读取配置信息、完成数据连接等工作。

ServletConfig对象(包含初始化参数和容器环境信息)传入inti()方法,此对象负责向Servlet传递信息,如传递失败,该Servlet会被容器清除掉,但不会调用destroy()方法释放资源,清除后Servlet容器将重新进行初始化这个Servlet。

运行阶段

web将请求发给Servlet容器,容器将http请求包装成HttpServletRequest对象,Servlet容器生成的响应包装成HttpServletResponse对象,两对象作为参数调用service()方法。通过HttpServletRequest对象获取客户端信息,HttpServletResponse对象生成http响应数据。

实例:多个web请求发送给同一个Servlet实例处理。

通过Servlet实现ServletThreadModel接口处理多线程问题,保证一次只有一个线程访问service()方法。通过维护一个请求队列或维护一个Servlet实例池来实现。

销毁阶段

Servlet被初始化后保存在内存中,知道服务器重启时Servlet对象被销毁。通过调用destroy()方法,回收init()方法中的资源。destroy()方法完成后,容器释放Servlet实例,以便能被垃圾回收。

调用destroy()方法,容器若要使用Servlet,必须新建Servlet实例。
















猜你喜欢

转载自blog.csdn.net/qq_40722284/article/details/80747520
今日推荐