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

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>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42160112/article/details/107919964