Servlet接口的子类(GenericServlet、HttpServlet)

在之前的博客中《Servlet基础知识》中讲解了Servlet的概念、编写步骤、运行原理及生命周期进行了讲解,这篇博客主要讲解Servlet接口及其子类

Servlet接口及子接口

GenericServlet

在之前的Servlet编写中,我们要实现Servlet接口并且重写其中的5个方法,但是只有一个方法即service()方法是我们在每次通过浏览器访问Servlet时会执行的方法,这个方法最为重要,那么对其他几个方法的重写就会比较多余,现在介绍Servlet接口的子类GenericServlet

在之前的servlet包下编写ServletDemo2

package com.westos.web.servlet;

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

@WebServlet("/demo2")
public class ServletDemo2 extends GenericServlet {

    
}

在继承 GenericServlet类后我们需要重写其中的一个抽象方法service()

package com.westos.web.servlet;

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

@WebServlet("/demo2")
public class ServletDemo2 extends GenericServlet {

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("你好GenericServlet");
    }
}

启动服务器后在浏览器访问http://127.0.0.1:8080/web/demo2,可以看到控制台的输出
在这里插入图片描述访问服务器中的Servlet成功

查看GenericServlet这个类的结构
在这里插入图片描述它实现了Servlet接口,并且对其中的getServletConfig()getServletInfo()destroy()以及init(javax.servlet.ServletConfig config)方法进行了非常简单的重写,将service()方法设置为抽象方法,凡是继承GenericServlet类的子类都必须重写service()方法,

如果在以后我们编写Servlet类的时候直接继承GenericServlet类即可,只需要对service()方法进行重写,其他方法也被继承,但是是隐式的,我们并看不到,这个类相对于之前的Servlet接口来说简单了许多

HttpServlet

有了GenericServlet这个类让我们的编码简单了许多,但是如果我们要在访问Servlet的同时遵守HTTP协议就必须知道GenericServlet的子类HttpServlet

HttpServlet对http协议的一种封装,简化操作

我们在servlet目录下编写ServletDemo3,继承HttpServlet,首先查看一下HttpServlet类的结构

HttpServlet继承自GenericServlet,继承这个类后对其中的service()方法进行了重写

在这里插入图片描述这个service()方法中的GET POST等单词表示我们提交请求的方式,如果是以GET方式请求,就执行doGet(req, resp),如果是POST方式请求就执行doPost(req, resp),当然在现阶段我们最常用的两种请求的提交方式就是GETPOST,我们主要使用的是doGet(req, resp)doPost(req, resp) ,对于其他的请求方式我们暂时不研究

在我们继承了HttpServlet类后就能直接重写doGet(req, resp)doPost(req, resp),关于这两个方法的参数reqresp我们在后面会讲解

现在对HttpServlet这个类进行简单的演示

ServletDemo3

package com.westos.web.servlet;

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

@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

我们重写doGetdoPost两个方法,重写完成后,因为浏览器提交请求的默认方式是Get,所以我们只需要在doGet方法中添加语句来看访问Servlet的效果

package com.westos.web.servlet;

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

@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

启动服务器,之后再浏览器访问http://localhost:8080/web/demo3,在控制台查看输出语句
在这里插入图片描述可以看到控制台的输出,访问成功

在讲解完HttpServlet后我们后续就会讲解和这个类有关的HTTP协议及Request对象

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值