一文把Servlet整的明明白白,阿里内部Mybatis学习笔记

本文详细解析了Servlet的配置错误,如url-pattern的路径问题和servlet-name的设置。接着探讨了Servlet的生命周期,包括构造、初始化、服务和销毁四个阶段。还介绍了Servlet的继承体系,重点讲解了GenericServlet和HttpServlet的用途。ServletConfig类的三大作用,如获取初始化参数和ServletContext对象也进行了说明,并给出了使用示例。最后,简要提到了JSP的原理,强调JSP页面本质是一个Servlet程序。
摘要由CSDN通过智能技术生成

1.3、常见错误


1.3.1、url-pattern 中配置的路径没有以斜杠打头

image-20210114092457782

1.3.2、servlet-name 配置的值不存在

image-20210114092533492

二、Servlet生命周期

=============

2.1、Servlet生命周期


​ Servlet 对象的生命周期:Servlet 创建对象–>初始化操作–> 运行操作–>销毁操作

​ Web 服务器管理了 Servlet 的生命周期,Servlet 对象整个过程都是 Web 服务器来管理的。

image-20200423121026556

2.2、Servlet 接口中生命周期方法


| 生命周期方法 | 作用 | 运行次数 |

| — | — | — |

| 构造方法 | 在对象实例化的时候执行

必须有公共的无参数构造方法 | 1次 |

| void init(ServletConfig config) | 在初始化的时候执行 | 1次 |

| void service(ServletRequest req, ServletResponse res) | 每次请求都会执行 | n次 |

| void destroy() | 在服务器正常关闭的时候 | 1次 |

2.3、Servlet的请求流程


img19


localhost:8080/one/hello

# 1. 浏览器发送请求,Tomcat接收到请求并通过结息请求地址来获取到要访问的项目路径和资源路径。

   项目路径:/one

   资源路径:/hello

# 2. Tomcat会扫描服务器内部的one项目下的所有Servlet,获取每一个Servlet的访问地址,并存储到一个集合中。资源路径作为ket,类的全限定名作为value。

   Map<String,String> map = new HashMap<>();

   map.put("/one","com.servlet.HelloServlet");

# 3. 将资源路径/one作为key从map中获取value,得到了类的全限定名。

# 4. 他会预先创建一个Servlet实例缓存池(key是Servlet的全限定名,value是Servlet的实例对象),拿着找到的key,去servletmap中寻找,如果找得到说明不是第一次访问,如果找不到,说明是第一次访问。

   Map<String,Servlet> servletmap = new HashMap<>();

   if(servletmap.get(“全限定名”) == null){

		// 第一次访问,执行第5步

	} else{

		// 第N次,直接执行第7步

	}

# 5. 通过反射实例化这个Servlet对象,并放入实例缓存池中。

# 6. Tomcat创建ServletConfig对象,然后调用init方法,传入创建的Servlet对象

# 7. 创建HttpRequest和HttpResponse对象,并调用service方法,传入HttpRequest和HttpResponse对象。

# 8. 等待下一次访问。 

复制代码

2.4、Servlet的继承体系


image-20210114102146396

2.4.1、GenericServlet类

image-20200423131027831

​ 默认实现了 Servlet 和 ServletConfig 这两个接口,它的子类是 HttpServlet,如果我们写的Servlet使用的是 Http 协议。


package cn.servlet;



import javax.servlet.GenericServlet;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebServlet;

import java.io.IOException;



@WebServlet(urlPatterns = "/demo")

public class DemoServlet extends GenericServlet {

    @Override

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

      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值