本文共 2706 字,大约阅读时间需要 9 分钟。
我们在写一个class 并 implement Servlet时,需要重写Servlet中的5个方法,但是大多时候都只用到 service 方法。
虽然中用到service方法,但其余的4个方法还得重写。
那我们能不能编写一个class,去继承或实现 Servlet 后,只用定义一个 service 方法就可以了。其他方法想有就有,不想有就没有?
这时候我们就要聊聊 Servlet 体系结构了。
Servlet 体系结构
Servlet
– interface,接口
↓|实现
GenericServlet
– 实现类,抽象类
↓|继承
HttpServlet
– 实现类,抽象类
做项目时,创建Servlet时候,推荐使用第三种方式:👉继承HttpServlet👉定义类继承HttpServlet👉 复写doGet/doPost方法
GenericServlet
- 将
Servlet
接口中的其他方法做了默认空实现,只将service()
方法作为抽象 - 将来定义
Servlet
类时候,可以继承GenericServlet
,实现service()
方法即可 - 其余四种方法, 若有需要,手动重写即可。
1 2 3 4 5 6 7 8 9 | @WebServlet("/demo2") public class ServletDemo2 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("demo2...."); } } |
HttpServlet
- 该抽象类是对 HTTP协议 的封装和描述,可以简化某些操作
- HTTP协议 有 7种 请求方式。现在,我们假设只是用最常用的两种请求方式GET和POST这两种请求方式。
service()
方法中 最先要干 的其中2件事👇
- 将来不管怎么样,都得做这么一件事:“先判断请求方式👉判断完后,要通过不同的请求方式,做出不同的代码逻辑“。
- 那么,这个过程是非常麻烦的。
- 同时,这个过程也是所有
service()
都该做的一个过程。 - 所以这个时候,官方针对这个过程,专门提供了一个class
HttpServlet
。 HttpServlet
已经帮程序员做好了这个过程,写好了相应的代码,就如上图的红色字体部分。集程序员不再需要去判断请求方式了。HttpServlet
内部定义了doGet(){}
和doPost(){}
这两个方法。并且在判断请求方式的if
中调用了这两个方法。- 这就是其基本的定义原理。就如下图👇
若将来想要屏蔽这种GET或POST请求方式的处理逻辑:我们可以继承 HttpServlet,并且去重写
doGet(){}
和doPost(){}
这两个方法。因为将来都是调用
service()
方法 ,并且service()
会做一个方法分发:你是get就调用doGet()
,你是post就调用doPost()
。-
做项目时,创建Servlet时候,推荐使用第三种方式:👉继承HttpServlet👉定义类继承HttpServlet👉 复写doGet/doPost方法
步骤
- 定义 class 继承
HttpServlet
- 重写
doGet()
和doPost()
两个方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* ServletDemo3.java */ 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; /** * @Classname ServletDemo3 * @Description TODO * @Date 2020/2/20 下午 10:54 * @Created by jerry */ @WebServlet("demo3") public class ServletDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet......"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost......"); } } |
注意
- 通过浏览器直接请求,是GET方式
- 现在掌握的知识,只能通过表单,完成POST方式
简单案例
- 新建login.html文件
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
- 重启服务,访问页面
- 将
method="post"
改为method="get"
- 再访问页面
注意:
使用get方式后,请求的参数会跟在url后。
后续阅读相关文章
1、
2、
3、
转载地址:https://melodyjerry.blog.csdn.net/article/details/106617393 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!