Servlet的入门

目录
一、Servlet的基本介绍
二、Servlet的使用
1. 前置准备
2. 简单演示
   2.1 关于Servlet的说明
   2.2 Servlet的使用
三、Servlet调用的流程
四、Servlet的生命周期
1. init() 初始化方法
2. service() 处理请求方法
3. destroy() 销毁方法
五、GET和POST请求
1. GET请求
2. POST请求
3. 两者的区别
六、通过继承HttpServlet来开发Servlet
1. HttpServlet继承类图
2. HttpServlet的使用
七、总结
八、补充

前面的几篇文章我们已经搭建好了JavaWeb学习所需要的环境。包括Tomcat的下载IDEA中配置Tomcat,如果还有小伙伴没有安装好相关环境,可以查看我环境搭建相关的文章:👇👇👇


相关文章

IDEA中配置TomcatIDEA中配置Tomcat
Tomcat安装及配置教程Tomcat安装及配置教程

一、Servlet的基本介绍

 前面的文章中我们提到过,Tomcat是前后端沟通的桥梁。没有Tomcat我们的后端就无法直接处理HTTP请求。那我们今天要讲的Servlet是干什么的呢?
 我们都清楚,后端的资源分为动态资源静态资源。如果前端请求的资源是静态的,那么我们就会直接返回。而动态资源的请求处理,就得依靠这个Servlet
下面是Servlet在整个资源请求返回过程中所处的位置(这里只是简单示意):👇

Servlet所处的位置

 我们都知道在Java中万事万物皆对象,当然HTTP请求也不例外,它也是被Tomcat这个服务器封装成了对象。这个HTTP请求对象会被当作参数传递给Servlet,在Servlet中进行请求的处理(注意🚩‼:我这里说的Servlet泛指实现了Servlet这个接口的实现子类)。

二、Servlet的使用

1. 前置准备

📌第一步
 在使用Servlet前我们需要导入servlet-api.jar这个包,因为它不是JDK自带的。它的位置在Tomcat安装目录\lib:👇

在这里插入图片描述
📌第二步
 在IDEA下右键此jar包点击Add as Library...。将此jar包添加到你的当前工程
在这里插入图片描述

 这里有的小伙伴的会发现,右键Add as Library...之后,没有出现上图的变化,出现这种情况的原因可能是:你的jar包出现了损坏,我们去Tomcat官网重新下载一个就好。

2. 简单演示

2.1 关于Servlet说明

Servlet是一个接口,而这个接口实现类的实例化以及调用Tomcat完成的。
 👉❎至于Tomcat是如何调用Servlet,还有Tomcat是怎样将HTTP请求封装成对象的。这些底层的内容,我会在后边的文章中讲解👈

2.2 Servlet的使用

🎈 后端Java的处理(这里我们实现Servlet接口,而不是继承它的实现子类,是为了看清楚它的结构)。

package com.jl;
import javax.servlet.*;
import java.io.IOException;

/**
 * @author long
 * @date 2022/9/8
 */
public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    /**
     * service是专门处理请求的方法
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("success");
    }

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

    @Override
    public void destroy() {

    }
}

🎈 web.xml配置文件

 💡这个文件里边我们可以配置,动态资源的外部访问路径。除了这种方式,我们还可以用注解的方式来配置。但建议新手先使用配置文件的方式,这样可以使我们对整个流程有更加清晰的认识。

<?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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.jl.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

🎈 启动Tomcat我们在浏览器输入我们的访问地址,就可看到DIEA控制台输出了结果。

在这里插入图片描述

至于这里的网址,为啥要写这个,我们文章最后讲解❎。

三、 Servlet调用的流程

通过上边我们知道ServletTomcat调用的,下边我们给出图示,帮助我们更加清晰的了解:👇

在这里插入图片描述

四、 Servlet的生命周期

我们在演示阶段Java代码中,可以看到里边有三个方法:init()service()destory()。这三个方法对应着Servlet的整个生命周期。

1. init()初始化方法

 init()初始化阶段。Tomcat加载 Servlet,加载完成后,Servlet容器(Tomcat)就会创建一个 Servlet 实例并调用 init(),而且init()只会被调用一次。

2. service()处理请求方法

 每收到一个HTTP请求,服务器(Tomcat)就会创建一个新的线程去处理,处理这个HTTP请求的时候就会调用service()
 其中,service方法有两个参数:ServletRequestServletResponseServletRequest封装的是HTTP请求,ServletResponse封装的是HTTP响应。

📦它们也都是通过Tomcat封装成对象的。

3. destroy()销毁方法

当web 应用被终止、Servlet 容器终止运行,或者Servlet 类重新装载时,会调用destroy()。比如重启 tomcat ,或者 redeploy web 应用。

五、GTE和POST请求

 这里我们添加这一部分,因为我们前端通常通过提交表单来向后端发送请求参数,而且我们后边也都是通过继承HttpServlet来实现处理请求。

1. GET请求

<table style="margin: auto;text-align: center">
    <form action="#" method="get">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密 码:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td>
                <input type="submit">
            </td>
        </tr>
    </form>
</table>

🎈页面效果

在这里插入图片描述

2. POST请求

<table style="margin: auto;text-align: center">
    <form action="#" method="post">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>

        <tr>
            <td>密 码:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td>
                <input type="submit">
            </td>
        </tr>
    </form>
</table>

🎈页面效果

在这里插入图片描述

3. 两者的区别

 它们的区别我们可以在上边的页面页面效果中看到:
GTE请求:会将参数携带到URL里边,我们可以在网址中看到,这也意味着这种请求方式,在登录页面等发送一些敏感信息的时候是不安全的,而且它对参数的大小也有限制。当然它的优点是速度快
POST请求:参数携带在请求体里边(如下图👇),这种方式比较安全,也可以发送更大数据。随之而来的它的缺点就是速度比较慢

🎈POST 请求体携带参数
在这里插入图片描述

六、通过继承HttpServlet来开发Servlet

1. HttpServlet继承类图

Servlet继承类图

2. HttpServlet的使用

🎈 后端Java的处理

package com.jl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author long
 * @date 2022/9/8
 */
public class MyServlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get()");
    }

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

 使用HttpServlet,我们只需要重写它的两个方法doPost()doGet()。当然除了这个方法之外,还可以处理其他方式的请求(例如:PutHead等),我们这里只讲这两个常用的。
 至于它是如何判断一个请求是什么类型的,我们会在后边的章节讲到。

🎈 web.xml

<?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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>myServlet02</servlet-name>
        <servlet-class>com.jl.MyServlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet02</servlet-name>
        <url-pattern>/test02</url-pattern>
    </servlet-mapping>
</web-app>

七、总结

  1. Servlet是一个供其他 Java 程序(Tomcat)调用的 Java 类,不能独立运行。
  2. 针对浏览器的多次 Servlet 请求,通常情况下,服务器只会创建一个 Servlet 实例对象,也就是说 Servlet 实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web 容器退出或者 redeploy 该 web 应用,servlet 实例对象才会销毁
  3. 在 Servlet 的整个生命周期内,init()只被调用一次。而对每次请求都导致Tomcat调用一次 servlet 的service()
  4. 对于每次访问请求,Tomcat都会创建一个新的HttpServletRequest 请求对象和一个新的 HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet的service()service()再根据请求方式分别调用doXXX 方法。

八、补充

这里我们还遗留有一个问题。我们在浏览器的需要输入的网址是什么?
如果忘记了在哪里说过这个问题,请点击👉这里
答案如下:👇

在这里插入图片描述
配置窗口里的Deployment下边的Application context中指定Web项目路径。而在web.xml文件的url-pattern中指定该Servlet的外部访问路径。


 👆以上就是这章节的全部内容,后边还会继续讲解JavaWeb相关的内容✍
最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艺术留白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值