首页 > 其他分享 >Servlet -个人理解笔记

Servlet -个人理解笔记

时间:2024-10-30 21:44:43浏览次数:9  
标签:调用 请求 service 方法 笔记 理解 servlet02 Servlet

Servlet的作用

        Servlet主要是为了衔接web应用的前端和后端的,作为它们俩中间数据交换的桥梁,现在很多web项目都是前后端分离的,前端写前端的后端写后端的,但是他俩所用的编程语言是有区别的,怎么实现它们之间的数据交换呢?Servlet就是为了解决这个,它是用java编写的,目前我是在tomcat上面使用它,其他环境还没试过

        需要注意的是它并不在jdk中,有专门的Servlet代码包,需要将它导入项目中才可以用,不过如果我们在tomcat环境下运行是不需要导入的,tomcat本身自带servlet的jar包

需要对应jar包的话可以到下面的链接去下载

https://mvnrepository.com/search?q=Servlet

Servlet接口源代码

public interface Servlet {
    //初始化函数
    void init(ServletConfig var1) throws ServletException;
    //存储配置信息
    ServletConfig getServletConfig();
    //处理请求
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    //获取当前Servlet的一些信息
    String getServletInfo();
    //释放内存
    void destroy();
}

        在最底层他被定位为一个接口,其中的service函数就是用来处理http请求的,如果我们要处理页面的请求就可以在这里面写业务代码

Servlet接口实现类图

他只被定义为接口,所以就会有相应的实现类,以下是servlet.jar包中提供的实现类的结构图

 为了方便开发,其中定义的HttpServlet类编写了很多函数,并且将接口中的类都实现了,我们使用时只需要继承它然后重写service方法即可,一般来说我们都是通过继承HttpServlet类重写它的方法来处理前端的数据请求

Tomcat下web页面请求的处理逻辑

在HttpService处理逻辑中,当网页发送请求,例如向服务器发送一个get请求,tomcat会自动调用HttpService中的service方法去处理,service中会根据不同的请求格式 例如get请求就调用 上图中的doget方法,post请求就会调用dopost方法,

HttpService实现类中业务代码的写法

1.重写父类service方法

这样的话,当服务器接收到请求就会调用service进行处理,不过由于不同格式的请求处理的业务代码可能不同,针对不同的请求我们需要编写不同的代码,全部在这一个方法中编写显得过于臃肿,实现的功能过多

public class servlet02 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("调用02");

    }
}

2.重写父类对应的do方法

根据父类的处理逻辑,我们直接重写父类中对应的do..方法即可,因为父类中的处理就是根据消息的不同调用不同的do方法

public class servlet02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost");
    }
}

配置Servlet的映射路径

        每个 Servlet 在 Web 应用中都需要有一个唯一的访问路径,以便客户端(通常是浏览器)能够准确地找到并访问该 Servlet。如果没有明确的映射路径,客户端就不知道通过什么 URL 来调用这个特定的 Servlet

例如有以下实现类,现在演示如何为他配置url

public class servlet02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }
}

1.在web.xml中配置

    <servlet>
        //为该类取的昵称,一般和它同名即可
        <servlet-name>servlet02</servlet-name>
        
        //对应的实现类的类名(包括包名)
        <servlet-class>servlet02</servlet-class>
    </servlet>
    
    //设置类与url的映射
    <servlet-mapping>
        //对应的昵称
        <servlet-name>servlet02</servlet-name>
        //设置的url标志,浏览器可以根据这个url来访问
        <url-pattern>/servlet02</url-pattern>
    </servlet-mapping>

先给对应类起一个别名,然后将别名和要设置的url放到servlet-mapping中作为一个映射、

2.使用注解

@WebServlet("/servlet02")
public class servlet02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }
}

直接在类定义上面添加即可,这种方式很简单,当然注解中还有一些其他的信息可以配置,这里只展示了最简单的配置url的方式,如果还要在注解中配置其他信息就不可以这样写了

做完以上操作就可以在tomcat中运行了,当然service中的处理代码因业务而异

Servlet生命周期

以下都是在Servlet接口中定义的方法

1.加载和初始化(init)

当服务器启动或客户端首次请求 Servlet 时,Web 容器会查找 Servlet 类文件,并使用类加载器将其加载到内存中。然后,Web 容器创建 Servlet 类的实例

在实例化之后,Web 容器会调用 Servlet 的 init 方法来进行初始化操作。在init 方法中,可以进行一些一次性的初始化工作,如读取配置文件、建立数据库连接等。

init 方法只会在 Servlet 生命周期中被调用一次

2.服务(service)

当客户端发送请求到服务器时,Web 容器会调用 Servlet 的 service 方法来处理请求。

service方法会根据请求的类型(GET、POST 等),调用相应的doGet、doPost 等方法来具体处理请求,并生成响应。

service方法在 Servlet 的生命周期中可能会被多次调用,每次处理一个客户端请求。

3.销毁(destroy)

当服务器关闭或 Web 应用被卸载时,Web 容器会调用 Servlet 的 destroy 方法。

在 destroy方法中,可以进行一些清理资源的操作,如关闭数据库连接、释放占用的内存等。

destroy 方法在 Servlet 的生命周期中也只会被调用一次。

总结

以上是我在这段时间所学,如果有不足及错误之处还请指正,如果觉得总结的还可以希望送上一个点赞支持

标签:调用,请求,service,方法,笔记,理解,servlet02,Servlet
From: https://blog.csdn.net/weixin_74141526/article/details/143374129

相关文章

  • 《算法导论》Ch.4_学习笔记
    <分治策略>分治策略三步骤:分解:将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小。解决:递归地求解出子问题,如果子问题地规模足够小,则停止递归,直接求解。合并:将子问题地解组合成原问题地解。递归情况:子问题足够大,需要递归求解。基本情况:子问题足够小,不再需要递归......
  • 在特征选择中,如何有效结合业务理解和数据分析?
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • STM32学习笔记-GPIO
    参考江科大32单片机学习相关知识GPIO基本构造APB2(AdvancedPeripheralBus2)是STM32微控制器架构中的一个外设总线,用于连接一些高性能外设,如定时器、USART、ADC和GPIO等。这些外设通常对性能要求较高,需要更快的数据传输速率。相较于APB1,总线频率更高,适合用于需要快速响应......
  • 读书笔记3
    13.估算1、通过学习估算,并将此技能发展到事物的数量级有直觉的程度,你就能展现出一种魔法般的能力,确定他们的可行性。2、多准确才足够准确?130个工作日和大概6个月,是不同的,显然,前者表示的精度更高。我们在做估算的时候也需要选好描述估算时间的单位值。3、估算结果怎么来呢。首......
  • 【JavaEE初阶】深入理解TCP协议特性之延时应答,捎带应答,面向字节流以及异常处理
     前言......
  • 强连通分量学习笔记+杂题
    图论系列:前言:僕は明快さ故にアイロニー優柔不断なフォローミー後悔後悔夜の果て相关题单:戳我一.强连通分量相关定义基本摘自oiwiki,相关定义还是需要了解。(实际就是搬了个oiwiki)强连通分量主要在研究有向图可达性,针对的图类型为有向弱联通图。1.强连通定义强连通:对......
  • 【SQL】Hive/Spark SQL笔记之时间函数、环比/同比/时间比较计算
    获取当天:'${zdt.format("yyyy-MM-dd")}'//获取上月月末select'${zdt.lastMonth().format("yyyy-MM-dd")}'T-1上月末select'${zdt.addDay(-1).lastMonth().format("yyyyMMdd")}'1个小时前select'${zdt.addHour(-1)......
  • 读书笔记2
    6.交流交流又有技巧,与客户的交流更是如此,书中介绍了几个需要注重的方面:1.知道自己要说什么首先要自己组织好语言。围绕心中所想的框架展开阐述2.了解听众想要什么交流时双方的事,是双方希望通过交流来达到共识,所以我们需要知道听众想要听到什么,比如,你可以用以下方法展开:你想......
  • 程序员修炼之道阅读笔记
    读完《程序员修炼之道:从小工到专家》的第二章“注重实效的途径”,我收获颇丰。这一章详细阐述了实现注重实效编程的具体方法和途径。它强调了在编程过程中的各种细节和要点,为我们提供了切实可行的指导。其中,关于早期原型制作的内容让我印象深刻。通过快速构建原型,我们可以更早地......
  • 理解Python中的变量
    引言在任何编程语言中,变量都是一个最基本的概念,它代表了一个用于存储和处理数据的预留内存位置。本教程将帮助你了解Python变量的基础知识,包括Python中变量的各种数据类型、变量的命名规则,以及数字和字符串类型变量的基本操作。变量的概念变量是程序中的实体,用于存储值......