HttpServlet,GenericServlet

在这里我们讲到了Servlet例子与注解配置,但是这种实现Servlet的方式每次都要实现5个方法,而对我们来说用最多的往往只是service方法,而其他方法是没用的。所以我们换一种方式来实现Servlet

我们先看一下Servlet的体系结构

发现Servlet的实现类:GenericServlet

那我们就不实现Servlet接口了,去继承GenericServlet类看一下

package com.lingaolu.servlet;

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

/**
 * @author 林高禄
 * @create 2020-07-06-10:46
 */
@WebServlet(value="/demo2")
public class ServletDemo2 extends GenericServlet {

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

 运行访问

后台输出

 是不是相当方便,因为其他方法GenericServlet已经重写了,只留了一个service抽象方法,所以我们只需要重写一个方法就可以了,其他方法如果需要那就重写就行

但是还有更方便的,我们看一下GenericServlet的体系

 GenericServlet有一个子类:HttpServlet

那我们就集成HttpServlet看一下

 

发现竟然不用重写任何方法,我们就去HttpServlet看一下源码

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String method = req.getMethod();
    long lastModified;
    if (method.equals("GET")) {
        lastModified = this.getLastModified(req);
        if (lastModified == -1L) {
            this.doGet(req, resp);
        } else {
            long ifModifiedSince;
            try {
                ifModifiedSince = req.getDateHeader("If-Modified-Since");
            } catch (IllegalArgumentException var9) {
                ifModifiedSince = -1L;
            }

            if (ifModifiedSince < lastModified / 1000L * 1000L) {
                this.maybeSetLastModified(resp, lastModified);
                this.doGet(req, resp);
            } else {
                resp.setStatus(304);
            }
        }
    } else if (method.equals("HEAD")) {
        lastModified = this.getLastModified(req);
        this.maybeSetLastModified(resp, lastModified);
        this.doHead(req, resp);
    } else if (method.equals("POST")) {
        this.doPost(req, resp);
    } else if (method.equals("PUT")) {
        this.doPut(req, resp);
    } else if (method.equals("DELETE")) {
        this.doDelete(req, resp);
    } else if (method.equals("OPTIONS")) {
        this.doOptions(req, resp);
    } else if (method.equals("TRACE")) {
        this.doTrace(req, resp);
    } else {
        String errMsg = lStrings.getString("http.method_not_implemented");
        Object[] errArgs = new Object[]{method};
        errMsg = MessageFormat.format(errMsg, errArgs);
        resp.sendError(501, errMsg);
    }

}

发现HttpServlet已经帮我们实现了service方法,里面对GET、POST等7中请求方式做了判断分别走不同的逻辑,那我们实际上的是需要重写这7个请求方法就可以了,实际上我们常用的就是GET和POST,我们的ServletDemo3就重写这2个方法

package com.lingaolu.servlet;

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

/**
 * @author 林高禄
 * @create 2020-07-06-10:46
 */
@WebServlet(value="/demo3")
public class ServletDemo3 extends HttpServlet {


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

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

 

我们知道浏览器直接访问的走的get请求,所以我们启动访问一下

后台输出

下面演示doPost请求

我用Postman演示

后台输出

不会使用的postman的那就自己写一个表单请求吧......

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林高禄

你打不打赏,我都会一直写博客

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

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

打赏作者

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

抵扣说明:

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

余额充值