Servlet学习笔记

1、Servlet简介

  1. Servlet是JavaEE的规范之一,规范就是一个接口。
  2. Servlet是JavaWeb的三大组件之一,三大组件:Servlet程序,Filter过滤器,Listener监听器。
  3. Servlet是运行在服务器上的一个小型Java程序,它可以接收客户端发送过来的请求,并响应数据给客户端

2、HelloServlet(实现Servlet接口)

注意项目的路径!我这里是http://localhost:8080/servletStudy

在这里插入图片描述

2.1、定义一个类实现Servlet接口

/**
 * 一个简单的实现Servlet接口的小型Java程序
 *
 * @Author:xiezr
 * @Creat:2021-07-27 9:35
 */
public class HelloServlet implements Servlet {
   
}

2.2、重写接口中的方法(service)

其他几个方法可以不理。

// 请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    PrintWriter writer = servletResponse.getWriter();	// 获取响应输出流
    writer.print("Hello Servlet!");		// 把Hello Servlet响应给浏览器
    System.out.println("3、调用service方法");	// 打印在控制台
}

2.3、配置web.xml(配置servlet)

<!--servlet标签用于给Tomcat配置servlet程序-->
<servlet>
    <!--servlet-name用于给sevlet程序起一个别名(一般是类名)-->
    <servlet-name>HelloServlet</servlet-name>
    <!--servlet-class是servlet程序的全类名-->
    <servlet-class>com.solve.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给servlet程序配置访问地址-->
<servlet-mapping>
    <!--servlet-name标签的作用是用来告诉服务器,当前配置的地址给哪个servlet程序使用-->
    <servlet-name>HelloServlet</servlet-name>
    <!--url-pattern标签配置访问地址
    / 斜杠在服务器解析的时候,表示地址为:http://localhost:8080/项目路径
    /hello 表示地址为:http://localhost:8080/项目路径/hello
    这里我的项目路径为/servletStudy,所以访问地址为:http://localhost:8080/servletStudy/hello
        -->
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

2.4、启动Tomcat

3、URL地址定位Servlet程序并访问的流程

在这里插入图片描述

4、Servlet的生命周期

  1. 调用构造器
  2. 调用init()初始化

第一步与第二步在第一次访问创建Servlet的时候会调用,之后在销毁之前的每次访问都不会调用。

  1. 调用service(),执行功能

每次访问servlet程序都会调用

  1. 调用destroy()销毁Servlet程序

第四步在web工程停止的时候会调用,至此,servlet生命周期结束。

public class HelloServlet implements Servlet {
    public HelloServlet(){
        System.out.println("1、调用构造器!");
    }

    // init():初始化方法
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2、Servlet程序初始化成功!");
    }

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

    // 请求的分发处理
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        PrintWriter writer = servletResponse.getWriter();
        writer.print("Hello Servlet!");
        System.out.println("3、调用service方法");
    }

    @Override
    public String getServletInfo() {
        return null;
    }
    // 服务器关闭后,Servlet的销毁方法
    @Override
    public void destroy() {
        System.out.println("4、Servlet程序销毁成功!");
    }
}

在这里插入图片描述当关闭Tomcat的时候,才调用destroy()销毁,中间多个调用service方法,是多次刷新访问造成的,而构造器和init()初始化方法只访问了一次。这就是一个Servlet的生命周期。

5、Servlet的请求分发处理

  • Servlet通过getMethod(),获取客户端请求的方式,并根据请求方式的不同,调用不同的方法,并把数据响应给客户端。
  • 请求的方式应该通过servletRequest这个对象调用,但是这个接口中并未声明getMethod()这个方法,但是其子接口HttpServletRequest中有声明getMethod(),所以我们可以做一个类型转换,通过HttpServletRequest的对象去调用getMethod()。
// 请求的分发处理
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        PrintWriter writer = servletResponse.getWriter();
        writer.print("Hello Servlet!");
        // 类型转换,servletRequest中没有getMethod(),但是其子类HttpServletRequest有
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 获取浏览器请求方式
        String method = httpServletRequest.getMethod();
        if ("GET".equals(method)){
            System.out.println("3、调用service方法,请求方式为get");
            doGet();
        }
        if ("POST".equals(method)){
            System.out.println("3、调用service方法,请求方式为post");
            doPost();
        }
    }

// doGet()和doPost()
public void doGet(){
    System.out.println("调用doGet方法");
}
public void doPost(){
    System.out.println("调用doPost方法");
}

hello.html中分别设置两种提交表单的方式,测试以下。

<form method="get" action="http://localhost:8080/servletStudy/hello">
    <input type="submit">
</form>

<form method="post" action="http://localhost:8080/servletStudy/hello">
    <input type="submit">
</form>

提交方式为get:

在这里插入图片描述

提交方式为post:
在这里插入图片描述
可以看出根据请求的方式不同,调用了不同的方法,实现Servlet的请求分发处理。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐