Servlet 体系结构
发布日期:2021-07-01 02:40:13 浏览次数:2 分类:技术文章

本文共 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()方法要干的其中2件事

  • 将来不管怎么样,都得做这么一件事:“先判断请求方式👉判断完后,要通过不同的请求方式,做出不同的代码逻辑“。
  • 那么,这个过程是非常麻烦的。
  • 同时,这个过程也是所有 service() 都该做的一个过程。
  • 所以这个时候,官方针对这个过程,专门提供了一个class HttpServlet
  • HttpServlet 已经帮程序员做好了这个过程,写好了相应的代码,就如上图的红色字体部分。集程序员不再需要去判断请求方式了。
  • HttpServlet 内部定义了 doGet(){}doPost(){} 这两个方法。并且在判断请求方式的 if 中调用了这两个方法。
  • 这就是其基本的定义原理。就如下图👇

HttpServlet类

  • 若将来想要屏蔽这种GET或POST请求方式的处理逻辑:我们可以继承 HttpServlet,并且去重写 doGet(){}doPost(){}这两个方法。

  • 因为将来都是调用 service()方法 ,并且 service()会做一个方法分发:你是get就调用 doGet() ,你是post就调用 doPost()

  • 做项目时,创建Servlet时候,推荐使用第三种方式:👉继承HttpServlet👉定义类继承HttpServlet👉 复写doGet/doPost方法

步骤

  1. 定义 class 继承 HttpServlet
  2. 重写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方式

简单案例

  1. 新建login.html文件
1 2 3 4 5 6 7 8 9 10 11 12 13
       
表单
  1. 重启服务,访问页面

3msHLq.gif

  1. method="post" 改为 method="get"
  2. 再访问页面

3myRXR.gif

注意:

使用get方式后,请求的参数会跟在url后。

3myjBt.png


后续阅读相关文章

1、

2、

3、

转载地址:https://melodyjerry.blog.csdn.net/article/details/106617393 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java笔记—语法
下一篇:MVC:开发模式

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年05月02日 23时16分17秒