当前位置: 首页 > article >正文

《深入浅出 Servlet:Java Web 开发的基石》(一)

  1. Servlet概述(了解)
    1. JavaWeb的三大组件  

Servlet是JavaWeb三大组件之一,它是我们学习JavaWeb最为基本的组件,也就是说你一定要100%的掌握它。

其它两种:Filter(过滤器)、Listener(观察者模式),后续讲解

    1. Servlet的作用

Servlet,即Server Let的意思,用来处理用户请求。当客户端发出请求后,由Tomcat去找到可以处理这一请求的Servlet来处理。

也就是说,用户的请求是由Servlet来处理的!例如用户发出登录请求,那么就应该由处理登录的Servlet来处理;用户发出登录请求,那么就应该有登录Servlet来处理。

  1. Servlet初识(熟练)
    1. 第一个Servlet
      1. Servlet说明

servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。也就是说,Servlet是由我们自己来完成的!但Servlet一定要实现javax.servlet.Servlet接口,并且还要在web.xml文件中部署!不然Tomcat是找不到我们写的Servlet的。

      1. Servlet接口

javax.servlet.Servlet接口中方法如下:

  • void init(ServletConfig servletConfig):当Tomcat创建Servlet实例后,马上调用init()方法。这个方法只在创建后调用一次!用来做Servlet初始化工作!一个Servlet实例只被创建一次,所以init()方法也只被调用一次!(本方法编写对Servlet的初始化代码)
  • void service(ServletRequest request, ServletResponse response):Servlet实例在每次处理请求时都调用service()方法。
  • void destroy()当Tomcat要销毁Servlet实例时,会先调用destroy()方法,再销毁它。所谓销毁Servlet,其实就是在Servlet缓存池中把Servlet移除!一般只有Tomcat关闭时,才会销毁Servlet实例!
  • ServletConfig getServletConfig()这个方法返回ServletConfig对象,但我们不能自己去创建ServletConfig对象,所以一般我们会在init()方法中把init()方法的参数保存起来,然后再在本方法中返回它。ServletConfig对象对应web.xml中当前Servlet实例的配置信息。
  • String getServletInfo():这个方法只是返回一个字符串,用来说明当前Servlet。基本没用!
      1. 创建Servlet

第一步:常见HelloServlet实现Servlet的接口,实现接口中的方法;

package cn.tx.servlet;

import javax.servlet.*;
import java.io.IOException;

public class Servlet1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

第二步:配置servlet的访问路径;

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>cn.tx.servlet.Servlet1</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

      1. JavaWeb请求响应流程

当Tomcat接收到请求(http://localhost:8080/servlet_pro/logon)后,Tomcat会找到servlet_pro项目中的web.xml文件,然后通过logon这个请求路径,查找处理这个请求的Servlet类型。这刚好与<url-pattern>/logon</url-pattern>匹配,这说明存在一个可以通过这个请求的Servlet。然后再通过<url-pattern>/logon </url-pattern>查找到<servlet-name>login</servlet-name>,然后再通过<servlet-name>login </servle-name>查找到<servlet-class>com.rl.servlet.LoginServlet</servlet-class>。这时Tomcat已经得到了一个Servlet类名字(一个字符串而已)。

Tomcat通过Servlet类名字去查找内存中是否存在Servlet对象,如果存在,那么就不用再去创建,直接获取这个Servlet实例,调用它的service()方法完成请求!

如果这个Servlet不存在,那么Tomcat会通过反射来创建Servlet实例,并把Servlet实例存放到Servlet池中,再去调用Servlet的service方法处理请求。

    1. Servlet生命周期

javax.servlet.Servlet接口中,有三个方法说明了Servlet的生命周期:

  • void init(ServletConfig):创建后马上调用init()完成初始化;
  • void service(ServletRequest,ServletResponse):每次处理请求时调用service()方法;
  • void destroy():当Tomcat要销毁Servlet实例时,先调用destroy()方法。

Servlet对象的实例默认情况下是在浏览器第一次调用servlet时候被创建的(可以修改其创建时机后续讲解)

现在你应该已经清楚了,Servlet的实例不由我们创建,Servlet的方法不由我们来调用,这一切都是由Tomcat来完成!!!这就是说由Tomcat来管理Servlet,而我们只需要去编写Servlet实现类,并将其部署到web.xml文件中去!

再次提醒,只有这三个方法是生命周期中的方法。也就是说,生命周期方法会被Tomcat在不同的时间点来调用!而其它方法就不会被调用了!!!如果你在自己写的Servlet中添加了其他方法,那么Tomcat也是不会去调用它们的!但你可以让生命周期方法去调用你自己写的方法就OK了!

  1. HttpServlet(精通)
    1. HttpServlet介绍

因为现在我们的请求都是基于HTTP协议的,所以我们应该专门为HTTP请求写一个Servlet做为通用父类。

 由上图我们可以看出,以后再写Servlet 可以直接继承HttpServlet

  • Servlet 一个标准
  • GenericServlet 是Servlet接口子类
  • HttpServlet 是GenericServlet子类,一个专门处理Http请求的Servlet
    1. Http请求方法

HTTP请求方法不只是GET和POST,还有其他的方法,但基本上用不上。这里只是简单介绍一下。你自己心里有个数,HTTP请求除了GET和POST之外还有别的就行了。

  • GET 通过请求URI得到资源
  • POST 用于添加新的内容
  • PUT 用于修改某个内容
  • DELETE 删除某个内容
  • CONNECT 用于代理进行传输,如使用SSL
  • OPTIONS 询问可以执行哪些方法
  • PATCH 部分文档更改
  • RACE 用于远程诊断服务器
  • HEAD 类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
  • TRACE 用于远程诊断服务器
    1. 创建HttpServlet
      1. 第一种方法

创建一个类继承HttpServlet

package cn.tx.servlet;

import javax.servlet.http.HttpServlet;

public class Servlet2 extends HttpServlet{
    
}

配置Servlet的映射路径

<servlet>
    <servlet-name>hello2</servlet-name>
    <servlet-class>cn.tx.servlet.Servlet2</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>hello2</servlet-name>
    <url-pattern>/hello2</url-pattern>
</servlet-mapping>

      1. 第二种方法

IDEA直接创建servlet

填写Servlet名称

创建完成,自己填写映射路径

      1. Servlet创建顺序

有些Servlet需要在Tomcat启动时就被创建,而不是第一次访问时被创建,那么可以在web.xml文件中配置<servlet>元素。

在<servlet>元素中添加子元素<load-on-startup>元素!

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>cn.tx.servlet.Servlet1</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet; 

所有添加了<load-on-startup>子元素的Servle,都会在Tomcat启动时被创建!当然,只是被创建,但没有处理请求!但我们知道在Servlet生命周期中init()方法会在创建后被调用,所以你可以在init()方法中做一些输出,查看是否在Tomcat启动时调用了它。

<load-on-startup>元素的值是一个序号,Tomcat会使用这个序号给多个Servlet排序!然后在Tomcat启动时会按这个顺序来创建Servlet实例对象!


http://www.kler.cn/a/449186.html

相关文章:

  • HDR视频技术之十一:HEVCH.265 的 HDR 编码方案
  • C++---------随机库,standfor库
  • Qt笔记:网络编程UDP
  • OpenHarmony的分布式服务框架介绍与实现解析
  • DataX与DataX-Web安装与使用
  • UE5仿漫威争锋灵蝶冲刺技能
  • Adversarial Machine Learning(对抗机器学习)
  • 【国产NI替代】基于STM32+FPGA的8振动+4温度(16bits)数据采集板卡解决方案,支持全国产
  • [创业之路-207]:《华为战略管理法-DSTE实战体系》- 6-什么是目标管理、什么是过程管理、什么是闭环管理?
  • Docker 入门:如何使用 Docker 容器化 AI 项目(一)
  • 排序-冒泡排序
  • 深入探索Flink的复杂事件处理CEP
  • 2009年408真题解析-数据结构篇(未完)
  • 使用idea创建JDK8的SpringBoot项目
  • 面向对象 类函数的区别 实例方法 类方法 静态方法 抽象方法
  • ensp 基于端口安全的财务部网络组建
  • 【更新】LLM Interview
  • 【工作流】工作顺序
  • Java内区域详解
  • 开源 JS PDF 库比较
  • 4-Gin HTML 模板渲染 --[Gin 框架入门精讲与实战案例]
  • 细说STM32F407单片机DMA方式读写SPI FLASH W25Q16BV
  • Python从0到100(七十九):神经网络-从0开始搭建过拟合和防过拟合模型
  • DINO对比去噪训练代码分析
  • 范德蒙矩阵(Vandermonde 矩阵)简介:意义、用途及编程应用
  • 图学习新突破:一个统一框架连接空域和频域