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)