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

Servlet -个人理解笔记

时间:2024-10-30 21:44:43浏览次数:16  
标签:调用 请求 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

相关文章