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

 1. Servlet API 的学习

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

1. Httpservlet
2. HttpServletRequest
3. HttpServletResponse

2. Httpservlet的学习

2.1 Httpservlet在tomcat的工作原理

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

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:本次的学习就到这里了,如果大家感兴趣的话,就请一键三连哦!!!

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值