Servlet的 实现

Servlet的 实现

​ 概念: Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思. 使用 Java 语言编写的服务 器端程序,可以像生成动态的 WEB 页,Servlet 主要运行在服务器端,并由服务器调用执行, Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创 建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。(言外之意:写自己的类,不用写 main 方法,别人自动调用)

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

  1. 实现

    1)、创建动态 web 项目

    2)、新建类

    3)、实现 Servlet 规范

    实现servlet规范的三种方式: a. 继承 HttpServlet 类 重写 service 方法

    ​ b.继承GenericServlet类 重写 service 方法

    ​ c.实现Servlet接口 重写 service 方法

    4)、重写 service 方法

    @Override
    	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    		System.out.println("Servlet02.....");
    	}
    

    5)、配置 web.xml

    <servlet>
      	<servlet-name>servlet01</servlet-name>  <!-- 给服务器看的名字,servlet标签中servlet-name要与servlet-mapping标签中的servlet-name的值保持一致 	  -->
      	<servlet-class>com.shsxt.servlet.Servlet01</servlet-class> <!-- servlet类的路径  -->
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>  <!-- 给服务器看的名字,servlet-mapping标签中的servlet-name的值要与servlet标签中servlet-name保持一致  -->
      	<url-pattern>/ser01</url-pattern> <!-- 对外访问路径 -->
    </servlet-mapping>
    

    配置文件的注意事项:

    注意事项:
    1、web.xml改动之后必须重启服务器
    2、url-pattern的值必须唯一
    java.lang.IllegalArgumentException: The servlets named [servelt01] and [servlet02] are both mapped to the url-pattern [/ser01] which is not permitted
    3、servlet-mapping标签中的servlet-name的值必须是已存在的值(servalet标签中的servlet-name)
    java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name servelt02
    4、servlet标签中servlet-name要与servlet-mapping标签中的servlet-name的值保持一致 (servlet标签中servlet-name存在)
    如果不一致,代码不会报错,只是访问的不是你的指定资源
    5、servlet标签中的servlet-class的路径不能写错
    java.lang.ClassNotFoundException: com.shsxt.servlet.Servlet04
    6、servlet-mapping标签中的url-pattern的值前面必须加"/"
    java.lang.IllegalArgumentException: Invalid ser01 in servlet mapping
    7、servlet标签中的servlet-name的值必须唯一
    Duplicate unique value [servlet01] declared for identity constraint “web-app-servlet-name-uniqueness” of element “web-app”.

    6)、发布项目并启动服务

    7)、启动项目

    看到类似一长串信息表示启动成功 (没有蓝色带下划线的字体),接下来就可以访问项目了

    8)、访问并查看结果

    在项目正确发布到服务器上之后,用户即可通过浏览器访问该项目中的资源。

    例: http://localhost:8080/hw/helloweb,

  2. 工作原理

    执行过程:
    客户端发出请求 根据 web.xml 文件的配置,找到对应的 读取中的值 找到对应的 找到该 class 并加载执行该 class,返回结果 由 Web 服务器将结果响应给客户端

  3. Servlet 的生命周期

    Servlet 没有 main()方法,不能独立运行,它的运行完全由 Servlet 引擎来控制和调度。 所谓生命周期,指的是 servlet 容器何时创建 servlet 实例、何时调用其方法进行请求的处理、 何时并销毁其实例的整个过程。(此处讨论默认的生命周期)

     实例和初始化时机
    当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创建实例并 进行初始化。
     就绪/调用/服务阶段
    有请求到达容器,容器调用 servlet 对象的 service()方法,处理请求的方法在整个声明周 期中可以被多次调用;HttpServlet 的 service()方法,会依据请求方式来调用 doGet()或者 doPost()方法。但是, 这两个 do 方法默认情况下,会抛出异常,需要子类去 override。
     销毁时机
    当容器关闭时(应用程序停止时),会将程序中的 Servlet 实例进行销毁。

    init 方法,在 Servlet 实例创建之后执行(证明该 Servlet 有实例创建了)

    service 方法,每次有请求到达某个 Servlet 方法时执行,用来处理请求(证明该 Servlet 进行 服务了)

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

​ Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载–>实例化–>服务–>销毁。下面我们描述一 下 Tomcat 与 Servlet 是如何工作的,看看下面的时序图.

在这里插入图片描述

​ 1、Web Client 向 Servlet 容器(Tomcat)发出 Http 请求
2、Servlet 容器接收 Web Client 的请求
3、Servlet 容器创建一个 HttpRequest 对象,将 Web Client 请求的信息封装到这个对象 中

​ 4、Servlet 容器创建一个 HttpResponse 对象
5、Servlet 容器调用 HttpServlet 对象的 service 方法,把 HttpRequest 对象与 HttpResponse 对象作为参 数,传给 HttpServlet 对象
6、HttpServlet 调用 HttpRequest 对象的有关方法,获取 Http 请求信息
7、HttpServlet 调用 HttpResponse 对象的有关方法,生成响应数据
8、Servlet 容器把 HttpServlet 的响应结果传给 Web Client

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值