12. Servlet入门 – Servlet体系结构

12. Servlet入门 – Servlet体系结构

前言

前面的章节中,我们基本认识了 Servlet 程序的实现方法,就是实现 Servlet 接口

下面我们来看看 Servlet 的体系结构,然后再来看看如何更加方便实现 Servlet 程序的方法。

使用 Idea 中查看 Servlet 的体系结构

1.进入 Servlet 接口的源码,右键 Servlet,打开 Servlet 接口的体系结构图

12. Servlet入门 - Servlet体系结构
image-20201224000346839
12. Servlet入门 - Servlet体系结构
image-20201224001447987

2.继续查看实现 Servlet 接口的方法

12. Servlet入门 - Servlet体系结构
image-20201224001544039
12. Servlet入门 - Servlet体系结构
image-20201224001622841
12. Servlet入门 - Servlet体系结构
image-20201224001707643

好了,到这里我们也大概知道 Servlet 接口实现的体系结构,下面我们再基于 API 文档来深入认识一下,然后再用代码实现一下。

在 API 文档查看 Servlet 的体系结构

查阅API查看Servlet接口的体系结构如下:12. Servlet入门 - Servlet体系结构

由API文档来看,我们可以使用继承 GenericServlet 或者HttpServlet来实现接口,我们下面我们分别看看这两个类,并且分别实现 Servlet。

1. GenericServlet 类

12. Servlet入门 - Servlet体系结构

1.2 使用GenericServlet 创建servlet:

  1. 创建一个类
  2. 继承GenericServlet
  3. 重写service方法
12. Servlet入门 - Servlet体系结构
image-20201224224238008
package com.web;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * @author Aron.li
 * @date 2020/12/24 22:37
 */

@WebServlet(name = "GenericDemoServlet",urlPatterns = "/generic")
public class GenericDemoServlet extends GenericServlet {

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("GenericDemoServlet执行.......");
    }

}

虽然,GenericServlet已经简化了servlet开发,但是我们平时开发程序需要按照一种互联网传输数据的协议来开发程序——http协议,因此,sun公司又专门提供了HttpServlet,来适配这种协议下的开发。

2. HttpServlet 类

12. Servlet入门 - Servlet体系结构

阅读上图的API可知,继承HttpServlet,我们需要重写doGet、doPost等方法中一个即可,根据Http不同的请求,我们需要实现相应的方法。

2.1 使用HttpServlet创建servlet:

  1. 创建一个类
  2. 继承HttpServlet
  3. 重写doGet方法和doPost方法
12. Servlet入门 - Servlet体系结构
image-20201224224630000
12. Servlet入门 - Servlet体系结构
image-20201224225127562
@WebServlet("/httpServlet")
public class HttpDemoServlet 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 方法。。。。");
    }

}

通过重写不同的方法,可以分别执行 GET 或者 POST 请求的业务。

2.2 在GET请求与POST请求处理相同业务的情况下,我们会选择在doGet中调用doPost

12. Servlet入门 - Servlet体系结构
image-20201224225420739
package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Servlet的常用的编写方法:
 * 1. 写一个类继承HttpServlet,重写doGet和doPost方法
 *    1.1 doGet()方法,是处理来自客户端的get请求
 *    1.2 doPost()方法,是处理来自客户端的post请求
 *
 *    通常情况下:服务器端针对同一个请求(不同的请求方式)不会做不同的处理,所以我们会选择在doGet中调用doPost
 * 2. 配置servlet的映射路径
 *
 * @author Aron.li
 * @date 2020/12/24 22:45
 */

@WebServlet("/httpServlet")
public class HttpDemoServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp); // 在doGet方法中调用doPost方法
    }

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

}

总结

通过以上两个API阅读,我们注意一个细节HttpServlet是GenericServlet的子类,它增强了GenericServlet一些功能,因此,在后期使用的时候,我们都是选择继承HttpServlet来开发servlet程序。


原文始发于微信公众号(海洋的渔夫):12. Servlet入门 – Servlet体系结构

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/34658.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!