Servlet接口的体系及Httpservlet中两个service()方法的作用

本文探讨了Servlet接口中的service方法以及HttpServlet如何对其进行抽象和封装。GenericServlet抽象类提供service方法的默认实现,子类只需重写此方法。而HttpServlet进一步扩展,实现了七种HTTP请求方法,并包含两个service方法。当如login.html表单提交到继承自HttpServlet的loginServlet时,会调用service方法,内部通过判断请求类型调用doGet或doPost等对应的方法。通过示例HelloServlet和Demo01.html页面,阐述了这一过程。

GenericServlet抽象类:

将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
* 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

HttpServlet抽象类:

该类是GenericServlet的子类,对http协议的一种封装,简化操作,添加了doGet/doPos(这两种最常用)t等七种请求方法
里面有两个service()方法,一个用作判断网页是七种请求方式的哪种,然后再使自己定义的servlet类调用对应的请求方法,一个是类型转换。
比如说有个注册登录的页面,login.html将表单提交后,会提交到loginServlet类(继承了httpservlet类)中,调用这个类中的service方法,而在这个类中有两个service方法,两个重载的方法,首先调用的是下面第一个图方法,这个方法的参数是原始的req和res,但是在这个方法中,不对req和res对象进行处理,它将req强转为HttpServletRequest类型,把res强转为HttpServletResponse,把强转后的参数传入到另一个service()方法,去进行是哪种请求方式。
在这里插入图片描述
在这里插入图片描述

举个栗子:
HelloServlet类

@WebServlet("/HelloServlet")//使用注解,就不用配置xml文件了,启动后访问HelloServlet资源路径就可以了,可随意命名(Servlet3.0版本以上才有的功能)
public class HelloServlet extends HttpServlet {
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost");
        response.setCharacterEncoding("GBK");

        response.getWriter().write("doPost请求方式");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet");
        response.setCharacterEncoding("GBK");

        response.getWriter().write("doGet请求方式");
    }
}

Demo01.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/servlet/HelloServlet" method="Get">//这里注意servlet是我idea配置的虚拟路径,如果没有就忽略不写
        <input type="text" name="用户名">
        <input type="submit" value="提交">

    </form>

</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值