【Java EE初阶二十四】servlet的深入理解

1. Servlet API 的学习

下面主要学习这三个类,就已经可以完成 Servlet 的大部分开发了;

  1. Httpservlet
  2. HttpServletRequest
  3. HttpServletResponse

2. Httpservlet的学习

2.1 Httpservlet在tomcat的工作原理

写一个 Servlet 代码,往往都是要继承这个类,重写里面的方法.,我们之前写的代码如下:

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;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //把这句话打印在tomact的控制台上(服务器上)
        System.out.println("hell0 word");
        //把内容显示到页面上,把hello word字符串作为http响应的body部分
        //这个部分就会被浏览器显示在页面上
        resp.getWriter().write("hello word");
    }
}

servlet这里的代码,只需要继承httpservlet就行,不必写一个main方法;

HttpServlet,继承这个类,重写里面的方法,目的就是为了把咱们自己定义的代码,"插入到" tomcat "中;

简单了解其工作原理如下:

在 tomcat 中,就有形如以下这样的代码:

// 先通过 tcp socket 读取请求. http 也是基于 tcp

String requestString = readRequest();

// 解析这个请求

HttpServletRequest reg = parse(requestString);

// 构造空的响应对象

IttpServletResponse = new HttpServletResponse();

// 创建一个 HttpServlet 对象.

Htpservlet s = new Helloservlet();------->Tomcat 能够自动的 new 出一个咱们写的子类;

进一步的,也就相当于,让咱们的代码"嵌入到"tomcat 内部运行了;

2.2 Httpservlet 的方法

一个 Servlet 不用了,说明 Tomcat 要关闭了,Tomcat 关闭有两种方式:

1.直接干掉 Tomcat 进程 (比如直接在任务管理器中结束任务或者直接一点x), 完全来不及调用 destroy 的.

2.通过 8005 管理端口,给 Tomcat 发送一个"停机"指令.这个时候是能够执行 destroy 的.

关于servlet和Httpservlet的理解:

servlet:一组 api, 由tomcat 提供的来操作 http 协议的,也可以理解成是一个 HTTP 服务器框架;写网站的时候主要的工作步骤如下:1接收前端传来的 http 请求,并解析;2根据 http 请求计算出一个 http 响应;3HttpServlet把 http 响返回到浏览器这边

Httpservlet:一般需要继承这个类,并重写里面的方法,最后把重写的代码插入到 Tomcat 的既定流程之中;

3. HttpServletRequest

HttpServletRequest表示了一个 HTTP 请求;

3.1 关于HttpServletRequest的一些方法

上述介绍的方法,都是 get 系列的方法 (都是读方法),没有 set 系列 (没有写方法),我们当前拿到的 HttpServletRequest,这里的数据都是来自于客户端发来的,这些数据的内容已经确定下来了,我们是不应该修改的;

下面主要通过postman构造http请求,观察服务器的相关响应:

最终浏览器得到服务器返回的响应:

3.2 在服务器获取请求中的参数.(Query String)

query string 中的键值对, 都是程序猿自定义的,实际开发中都会非常广泛的使用到 qrery string 这样的机制,如下图所示:

1、http请求中没有query string

1、http请求中有query string

3.3 通过 http 请求的 body 来传递参数(POST)

1)、直接通过 form 表单(body 的格式就是 query string 的格式)

Content-Type: application/x-www-form-urlencoded

前端往后端传输数据并顺利拿到:

该方式能被servlet支持;
2)、直接使用 json

(body 的格式就是json),Content-Type: application/json

json 本质上也是键值对,规则和 form 表单截然不同,解析方式自然也就变了,由于json 支持"嵌套",因此自己手写解析 jon 的代码,并不容易的,其嵌入结构如下所示:

该方式不能被servlet支持,所以要下载第三方库;此处为了针对 json 格式的数据进行解析和构造,就需要引入 json 的库;java 世界中,json 的第三方库是非常多的.咱们使用的叫做 jackson,下载第三方库如下:

1)下载导入jackson 到项目中.通过 maven:

2)使用 jackson

一个类,两个方法:

ObjectMapper:对象映射器;

把json 字符串,映射成一个 Java 的对象,读方法;

把一个java 对象,映射成json 字符串,写方法;

使用逻辑如下:

网络传输的时候:使用 json 字符串;

站在服务器的角度:收到的请求,就是json 字符串.,需要把 json 字符串,先映射成java 对象,再进行一系列的业务逻辑处理,处理完了之后,可能还需要把得到的java 对象,映射回json字符串,并且通过响应来返回;

图解对象映射器的分析如下:

1、读方法

关于java.class文件的详细了解:

细节处理:

2、写方法

该端代码的分析:

3、postman构造请求:

postman 对于json 格式要求比较严格,key 必须加上 引号;

4. HttpServletResponse

HttpServletResponse的方法:

response 里的 api 都是 set 系列的方法,request 里的 api 都是 get 系列的方法;

有时候请求得到的响应,光是一个状态码但是 body 是空,不太友好,浏览器上是不会直接显示状态码,如下图所示:

ps:本次的学习就到这里了,如果大家感兴趣的话,就请一键三连哦!!!

相关推荐
文丑颜不良啊12 分钟前
LeetCode2241~2260题目解析
java·leetcode
文丑颜不良啊17 分钟前
LeetCode2321~2340题目解析
java·leetcode
驭渊的小故事1 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang1 小时前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
vipxieliang1 小时前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路1 小时前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试
Rainmicro2 小时前
【无标题】
java·数据库·算法
驭渊的小故事2 小时前
Spring AOP 入门:从 AOP 概念到第一个耗时统计切面
java·后端·spring
天天被压力2 小时前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python
天天被压力2 小时前
【A股分钟级高频数据完全手册 #10】股票实时行情数据接口Python:公开源实时交易取数
java·人工智能·python