步骤:

  1. 创建Web项目web-demo,导入Servlet依赖坐标
  2. 创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
  3. 配置:在类上使用@WebServlet注解,配置该Servlet的访问路径
  4. 访问:启动Tomcat,浏览器中输入URL地址访问该Servle
//导入Servlet依赖坐标 
<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <!--
              此处为什么需要添加该标签?
              provided指的是在编译和测试过程中有效,最后生成的war包时不会加入
               因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
            -->
            <scope>provided</scope>
        </dependency>
    </dependencies>

//步骤2
package com.kuangziyao;

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

//步骤3:配置//步骤3:配置:在类上使用@WebServlet注解,
@WebServlet("/demo1")
 
public class ServletDemo1 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 {
        System.out.println("干饭");
    }

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

    @Override
    public void destroy() {

    }
}

执行流程

Servlet程序能正常运行,但是我并没有创建ServletDemo1类的对象,也没有调用对象中的service方法,为啥在控制台就能打印了呢?

  • 浏览器发出http://localhost:8080/web-demo/demo1请求,从请求中可以解析出三部分内容,分别是localhost:8080web-demodemo1
    • 根据localhost:8080可以找到要访问的Tomcat Web服务器
    • 根据web-demo可以找到部署在Tomcat服务器上的web-demo项目
    • 根据demo1可以找到要访问的是项目中的哪个Servlet类,根据@WebServlet后面的值进行匹配
  • 找到ServletDemo1这个类后,Tomcat Web服务器就会为ServletDemo1这个类创建一个对象,然后调用对象中的service方法
    • ServletDemo1实现了Servlet接口,所以类中必然会重写service方法供Tomcat Web服务器进行调用
    • service方法中有ServletRequest和ServletResponse两个参数,ServletRequest封装的是请求数据,ServletResponse封装的是响应数据,我们可以通过这两个参数实现前后端的数据交互

发表回复

您的电子邮箱地址不会被公开。