美文网首页
Servlet简介

Servlet简介

作者: 有心丶人 | 来源:发表于2019-05-10 20:02 被阅读0次

    Servlet 主要功能

    Servlet 主要功能在于交互式地获取和响应数据,生成动态 Web 内容。这个过程为:

    1.客户端发送请求信息到服务器

    2.服务器将请求信息封装并交给Servlet

    3.Servlet接收请求信息、处理数据,并生成响应信息

    4.Servlet将响应信息封装并交给服务器

    5.服务器返回响应信息给客户端

    图解


    Servlet生命周期

    ●什么是生命周期

    生命周期指的是一个对象从创建到销毁的过程(从出生--->死亡)

    ●Servlet的生命周期

    Servlet的生命周期指的是Servlet对象从创建到销毁的过程(创建对象,初始化操作,运行操作,销毁操作)

    ●谁来管理?

    Servlet对象的整个生命周期都是由Tomcat来管理的(Servlet的创建,初始化,运行,销毁的行为/方法都是Tomcat来负责调用的)

    ●javax.servlet.Servlet接口中的方法

    void init(ServletConfig config):初始化Servlet对象方法

    void service(ServletRequest req, ServletResponse resp):服务方法,Web动态网页的操作就编写在该方法.

    void destroy():销毁Servlet对象方法.

    -------------------------上面三个方法是生命周期相关的方法---------------------------------

    ServletConfig getServletConfig():获取Servlet的配置信息对象.

    String getServletInfo():获取Servlet的信息(Servlet的作者,版本,版权相关).

    ●生命周期方法执行时机

    (构造器:在服务端程序第一次被请求的时候,调用,只被调用一次)

    void init(ServletConfig config):在构造器执行完毕之后,调用init方法,也只会执行一次.

    void service(ServletRequest req, ServletResponse resp):每一次请求都会执行该方法.

    void destroy():正常关闭Tomcat才会执行(该方法不一定会被执行,我们没必要在其中编写扫尾的操作).

    代码演示

    简易版

    ●总结:

    1)执行流程:构造器--->init方法---->[ service方法 ]循环 ---->destory方法

    2)重要结论:Servlet是单例的,只会在第一次请求时被创建一次.(多线程访问可能有线程安全问题,如何解决? 避免使用成员变量,要使用局部变量)

    ●注意:

      Servlet类的构造器必须使用public、无参构造器.(Tomcat通过反射获取public构造器创建Servlet对象的)



    Servlet的请求流程

      1:浏览器发送请求到Tomcat:http://localhost:80/hello.

      2:Tomcat解析HTTP请求:/hello.

      上下文路径:“”;资源的名称:/hello

      3:Tomcat解析/conf/server.xml文件,获取其中所有的<Context/>元素,并找到path属性为“”的元素.

    <Context docBase="web项目根路径" path=""/>.

    再获取该<Context/>元素中docBase属性值,该属性值就是要访问的web项目的根路径.

      4:从该web项目根路径/WEB-INF下找到web.xml文件.并寻找值为:/hello的<url-pattern>.

      找不到: 报404错误.

      找  到: 继续.

      5:通过/hello,找到当前Servlet的全限定名.com.test.hello.HelloServlet.

      6:从Servlet的实例缓存池中去获取com.test..hello.HelloServlet对应的对象.

            Map<String,Servlet> cache = .....;

            Servlet obj = cache.get("com.test.hello.HelloServlet");

            if(obj == null{

                //第一次请求:TO 7.

          }else{

                //非第一次请求:TO 10;

         }

        7:使用反射创建Servlet对象并存储到Servlet实例缓存池中,供下一次请求使用.

            Servlet obj = Class.forName("com.test.hello.HelloServlet").newInstance();

        cache.put("com.test.hello.HelloServlet",obj);

      8:容器创建ServletConfig对象,并调用init方法,来完成初始化操作.

            obj.init(config);

      9:容器创建ServletRequest和ServletResponse对象,并调用service方法,处理请求.

            obj.service(req,resp);

      10:在service方法中,对当前请求的客户端做响应.

    相关文章

      网友评论

          本文标题:Servlet简介

          本文链接:https://www.haomeiwen.com/subject/whjzoqtx.html