Servlet的实现

87次阅读

共计 4246 个字符,预计需要花费 11 分钟才能阅读完成。

Servlet 的实现

​ Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。应用 Java 语言编写的服务器端程序,能够像生成动静的 WEB 页,Servlet 次要运行在服务器端,并由服务器调用执行,是一种依照 Servlet 规范来开发的类。是 SUN 公司提供的一门用于开发动静 Web 资源的技术。(话中有话:要实现 web 开发,须要实现 Servlet 规范)

​ Servlet 实质上也是 Java 类,但要遵循 Servlet 标准进行编写,没有 main()办法,它的创立、应用、销毁都由 Servlet 容器进行治理(如 Tomcat)。(话中有话:写本人的类,不必写 main 办法,他人主动调用)

​ Servlet 是和 HTTP 协定是紧密联系的,其能够解决 HTTP 协定相干的所有内容。这也是 Servlet 利用宽泛的起因之一。

​ 提供了 Servlet 性能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。

创立 Web 我的项目

  1. 抉择 “File” —> “New” —> “Project”

      1. 设置我的项目的相干信息,抉择 “Next”

          1. 设置项目名称及工作空间

              1. web 我的项目目录构造如下

                1. Servlet 的实现

                  新建类

                  1. 点击 “src” —> “new” —> “package”,创立一个文件包

                  2. 在包上面创立 Java 类文件,点击包名 —> “New” —> “Java Class”

                  3. 创立一个一般的 Java 类

                  4. 如下

                    package com.xxxx.servlet;

                    public class Servlet01 {

                    }

                    1. 实现 Servlet 标准

                      ​ 实现 Servlet 标准,即继承 HttpServlet 类,并到如响应的包,该类中曾经实现了通信的规定,咱们只须要进行业务的实现即可。

                      package com.xxxx.servlet;

                      import javax.servlet.http.HttpServlet;

                      public class Servlet01 extends HttpServlet {

                      }

                      重写 service 办法

                      ​ 满足 Servlet 标准只是让咱们的类可能满足接管申请的要求,接管到申请后须要对申请进行剖析,以及进行业务逻辑解决,计算出后果,则须要增加代码,在标准中有一个叫做 service 的办法,专门用来做申请解决的操作,业务代码则能够写在该办法中。

                      package com.xxxx.servlet;

                      import javax.servlet.ServletException;
                      import javax.servlet.http.HttpServlet;
                      import javax.servlet.http.HttpServletRequest;
                      import javax.servlet.http.HttpServletResponse;
                      import java.io.IOException;

                      public class Servlet01 extends HttpServlet {

                      @Override
                      protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                      System.out.println("Hello Servlet!");
                      resp.getWriter().write("Hello World");
                      }
                      }

                      设置注解

                      ​ 在实现好了所有代码的编写后,还须要向服务器阐明,特定申请对应特定资源。

                      ​ 开发 servlet 我的项目,应用 @WebServlet 将一个继承于 javax.servlet.http.HttpServlet 的类定义为 Servlet 组件。在 Servlet3.0 中,能够应用 @WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类标注为能够解决用户申请的 Servlet。

                      package com.xxxx.servlet;

                      import javax.servlet.ServletException;
                      import javax.servlet.annotation.WebServlet;
                      import javax.servlet.http.HttpServlet;
                      import javax.servlet.http.HttpServletRequest;
                      import javax.servlet.http.HttpServletResponse;
                      import java.io.IOException;

                      @WebServlet("ser01")
                      public class Servlet01 extends HttpServlet {

                      @Override
                      protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                      System.out.println("Hello Servlet!");
                      resp.getWriter().write("Hello World");
                      }
                      }

                      用注解配置 Servlet

                      @WebServlet(name="Servlet01",value="ser01")

                      @WebServlet(name="Servlet01",urlPatterns = "ser01")

                      也能够配置多个拜访门路

                      @WebServlet(name="Servlet01",value={"ser01",'ser001'})

                      @WebServlet(name="Servlet01",urlPatterns={"ser01",'ser001'})

                      公布我的项目并启动服务

                      ​ 到此,须要编写和配置的中央曾经实现,我的项目曾经残缺了,然而如果须要外界可能拜访,还须要将我的项目公布到服务器上并运行服务器。

                      1. 设置我的项目的站点名(我的项目对外拜访门路)

                      2. 设置我的项目的 Tomcat 配置

                      3. 启动服务器

                        1. 拜访并查看后果

                          ​ 在我的项目正确公布到服务器上之后,用户即可通过浏览器拜访该我的项目中的资源。留神 url 的 格局正确,tomcat 的端口为 8080。

                          ​ 浏览器拜访地址:http:localhost:8080s01ser01

                          页面成果

                          后盾后果

                          到这里咱们的第一个 Servlet 就实现了!

                          Servlet 的工作流程

                          1. 通过申请头获知浏览器拜访的是哪个主机
                          2. 再通过申请行获取拜访的是哪个一个 web 利用
                          3. 再通过申请行中的申请门路获知拜访的是哪个资源
                          4. 通过获取的资源门路在配置中匹配到实在的门路,
                          5. 服务器会创立 servlet 对象,(如果是第一次拜访时,创立 servlet 实例,并调用 init 办法进行初始化操作)
                          6. 调用 service(request,response)办法来解决申请和响应的操作
                          7. 调用 service 结束后返回服务器 由服务器讲 response 缓冲区的数据取出,以 http 响应的格局发送给浏览器
                            1. Servlet 的生命周期

                              ​ Servlet 没有 main()办法,不能独立运行,它的运行齐全由 Servlet 引擎来管制和调度。所谓生命周期,指的是 servlet 容器何时创立 servlet 实例、何时调用其办法进行申请的解决、何时并销毁其实例的整个过程。

                              • 实例和初始化机会

                                当申请达到容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创立实例并进行初始化。

                              • 就绪调用服务阶段

                                有申请达到容器,容器调用 servlet 对象的 service()办法, 解决申请的办法在整个生命周期中能够被屡次调用;HttpServlet 的 service()办法,会根据申请形式来调用 doGet()或者 doPost()办法。然而,这两个 do 办法默认状况下,会抛出异样,须要子类去 override。

                              • 销毁机会

                                当容器敞开时(应用程序进行时),会将程序中的 Servlet 实例进行销毁。

                                上述的生命周期能够通过 Servlet 中的生命周期办法来察看。在 Servlet 中有三个生命周 期办法,不禁用户手动调用,而是在特定的机会有容器主动调用,察看这三个生命周期办法 即可察看到 Servlet 的生命周期。

                                • init 办法,在 Servlet 实例创立之后执行(证实该 Servlet 有实例创立了)

                                  public void init(ServletConfig config) throws ServletException {
                                  System.out.println("实例创立了...");
                                  }

                                  service 办法,每次有申请达到某个 Servlet 办法时执行,用来解决申请(证实该 Servlet 进行服务了)

                                  protected void service(HttpServletRequest req, HttpServletResponse resp)
                                  throws ServletException, IOException {
                                  System.out.println("服务调用了...");
                                  }

                                  destroy 办法,Servlet 实例销毁时执行(证实该 Servlet 的实例被销毁了)

                                  public void destroy() {
                                  System.out.println("实例销毁了...");
                                  }

                                  ​ Servlet 的生命周期,简略的概括这就分为四步:servlet 类加载 --> 实例化 --> 服务 --> 销毁。

                                  ​ 上面咱们形容一下 Tomcat 与 Servlet 是如何工作的, 看看上面的时序图:

                                  ​ 1. Web Client 向 Servlet 容器(Tomcat)收回 Http 申请

                                  ​ 2. Servlet 容器接管 Web Client 的申请

                                  ​ 3. Servlet 容器创立一个 HttpServletRequest 对象,将 Web Client 申请的信息封装到这个对象 中

                                  ​ 4. Servlet 容器创立一个 HttpServletResponse 对象

                                  ​ 5. Servlet 容器调 HttpServlet 对象 service 办法,把 Request 与 Response 作为参数,传给 HttpServlet

                                  ​ 6. HttpServlet 调用 HttpServletRequest 对象的无关办法,获取 Http 申请信息

                                  ​ 7. HttpServlet 调用 HttpServletResponse 对象的无关办法,生成响应数据

                                  ​ 8. Servlet 容器把 HttpServlet 的响应后果传给 Web Client

                                  加 VX 理解点我扫码支付
                                  学习更多常识,请退出 QQ 群:1080355292,入群暗号(33)

正文完
 0