八、Servlet容器

八、Servlet容器

    1、Servlet概述

        Servlet(Server Applet),全称Java Servlet。Servlet是基于http协议的,在服务端(如Tomcate)运行的,是按照Servlet规范编写的一个Java类。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。Servlet的生命(周期)是由Servlet容器管理。

        Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http.HttpServlet是定义的采用Http通信协议的Servlet的特例。毕竟我们大部分的Web服务都是走的Http协议。HttpServlet针对Http请求的delete、get、post、options、put和trace定义的相应的方法。

    一个Web的请求过程如下:

        (1)、WEB服务器接收一个用户请求;

        (2)、WEB服务器将请求转交给WEB服务器关联的Servlet容器;

        (3)、Servlet容器找到对应的Servlet并执行这个Servlet;

        (4)、Servlet容器将处理结果返回给WEB服务器;

        (5)、WEB服务器把结果送回用户;

    2、Servlet生命周期

        (1)、加载和实例化阶段

            时机取决于web.xml的定义,如果是比较原始的开发方式(通过配置文件定义Servlet),如果有x则在容器启动时,反之则在第一次针对这个Servlet的请求发生时。

        (2)、初始化阶段

            实例化后会立马进行初始化,也就是执行init方法。

            ①、Servlet容器加载Servlet类,把Servlet类的.class文件中的数据读至内存中

            ②、Servlet容器创建一个ServletConfig对象

            ③、创建一个Servlet对象

            ④、Servlet容器调用Servlet对象的init()方法进行初始化

        (3)、运行阶段

            当Servlet容器接收到一个请求时,Servlet容器会针对该请求创建一个ServletRequest和ServletResponse对象,然后调用service()方法,并把这两个参数传递给service()方法。从ServletRequest中获取请求信息,并处理请求,再通过ServletResponse生成这个请求的响应结果,然后销毁对象。无论请求是get或者post,最终这个请求都会由service()方法来处理,而具体的业务逻辑,就可以通过该方法来实现了。

        (4)、销毁阶段

            当Web应用被终止时,Servlet容器会先调用Servlet对象的destrory()方法,然后销毁Servlet对象。一般我们会在该方法中释放Servlet所占用资源,如:数据库连接、关闭文件输入输出流等。

    3、DispatcherServlet

        DispatcherServlet的祖先之一便是Servlet接口。在Servlet生命周期部分,请求是通过Servlet的service()来进行处理的,可是在DispatcherServlet中并没有该函数的定义。其实,service()是被定义在其父类FrameworkServlet中的,而FrameworkServlet重写了父类HttpServlet的service(),而HttpServlet的service()主要作用是根据请求(GET/POST...)的不同,将请求交由不同的处理方法(doGet方法/doPost方法/...)来处理。

        (1)、SpringMVC/DispatcherServlet执行流程

            ①、用户发请求—>DispatcherServlet:前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

            ②、DispatcherServlet—>HandlerMapping:HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器,多个HandlerInterceptor拦截器);

            ③、DispatcherServlet—>HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器;

            ④、HandlerAdapter—>处理器功能处理方法的调用:HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView对象(包含模型数据,逻辑视图名),ModelAndView是SpringMVC的底层对象;

            ⑤、ModelAndView的逻辑视图名—>ViewResolver:ViewResoler将把逻辑视图名解析为具体的View,然后返回视图给前端控制器; 

            ⑥、View—>渲染:View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;

            ⑦、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户;

        (2)、DispatcherServlet的重要成员

            ①、HandlerMapping:功能是根据请求的url找到合适的处理器

                子类:RequestMappingHandlerMapping:将Contoller的带RequestMapping方法,添加到处理方法映射器和路径方法解决器中。

            ②、HandlerAdapter:作用是根据请求的url找到处理器的调用方法

                子类:RequestMappingHandlerAdapter:主要是解决请求的会话、请求头部处理、数据的绑定等。然后从容器中获取handlerMethod处理业务逻辑,获取数据,渲染视图,并返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值