servlet API

这篇文章主要讲解servlet中常用的API,主要涉及到HttpServlet, HttpServletRequest,
HttpServletResponse,这三个类.

首先创建一个servlet程序,这只是其中的代码部分

在这里插入图片描述

  1. 创建一个类 HelloServlet , 继承自 HttpServlet\n
  2. 在这个类上方加上 @WebServlet(“/hello”) 注解, 表示 Tomcat 收到的请求中, 路径为 /hello的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path)\n
  3. 重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发
  4. HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等)
    都是通过这个对象来获取.
  5. HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header, body 等)
  6. resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器. 经被包含在 Tomcat 里

HttpServlet

接下来看看httpServlet中的方法.

在这里插入图片描述

并不是在实例化之后就调用该方法,而是在tomcat首次收到了和该类相关联的请求的时候会调用该方法.我们用上面的代码进行解释

在这里插入图片描述

通过@webServlet这个注解把"/hello" 和helloServlet连接起来,当tomcat收到/hello这样的路径请求,就会调用到HelloServlet,于是对HelloServlet进行实例化(只实例化一次),后续在收到/hello的请求,直接复用之前的helloServlet实例即可.而HelloServlet继承自
HelloServlet,也可以重写父类的init方法.

在这里插入图片描述

当服务器终止的时候会调用一次.

在这里插入图片描述

收到http请求的时候就会调用一次,其中,向上面写的doGet方法就是在这里面被调用的.

在这里插入图片描述

服务器中不同的请求会调用不同的方法.

在这里插入图片描述

通过ajax构造http请求

在这里插入图片描述

在url里访问的是method这个servlet构造的动态页面 .

具体文件的放置位置
在这里插入图片描述

谈谈servlet的生命周期

开始的时候执行init方法, 每次收到请求执行service方法, 销毁之前,执行destroy方法.

HttpServletRequest

HttpServletRequest表示的是一个http请求.这个对象是tomcat自动构造的,tomcat其实会实现监听端口,接受连接,读取请求,解析请求,构造请求等一系列工作.

核心方法如下:

在这里插入图片描述

前端给后端传参

  1. 通过GET ,query string的形式传递参数
    在这里插入图片描述
    这里的query string 键值对会自动被tomcat处理成形如Map这样的结构,后续就可以随时通过key获取到value.

  2. 通过POST,参数通过body借助form表单传参
    对于前端是form表单这样的数据,后端还是使用getParameter
    在这里插入图片描述
    在这里插入图片描述
    通过抓包方法来观察请求在这里插入图片描述
    使用getParameter,既可以获取到jquery string中的键值对,也可以获取到form表单中构造的body中的键值对.

  3. POST,参数通过body借助json格式来传递前后端
    在这里插入图片描述
    通过postman构造出一个post请求,body就是json数据.
    在这里插入图片描述
    请求到达tomcat,tomcat解析成req对象,在servlet代码中,req.getInputStream,读取body中的内容,有把body的内容构造成响应结果,返回给浏览器(postman)中.
    当前通过json传递数据,但是服务器这边只能把整个body读取出来,没有按照键值对的方式来处理,不能根据key获取value,可以使用第三方库来解析json格式,这里使用jackson,使用maven引入第三方库,导入到pom.xml中.引入依赖.
    在这里插入图片描述

用postman构造一个http请求
在这里插入图片描述

java代码如下在这里插入图片描述

在java中,一般属性都设置成private的,但是要想把类作为jackson返回的对象,就需要让jackson能够看到里面有哪些属性,此处有两种方法.

  1. 直接把属性设置成public
  2. 可以给属性提供public的getter 和setter.

其中详细说说下面这行代码的作用
在这里插入图片描述

  • 会从body中读取Json格式的字符串

在这里插入图片描述

  • 根据第二个参数的类对象,创建Student实例
  • 解析上述json格式的数据,处理成Map键值对结构
  • 遍历所有键值对,看 键 的名字和Student实例中那个属性名字匹配,就把对应的value设置到该属性中
  • 返回该student实例

HttpServletResponse

servlet中的doXXX方法就是根据请求计算得到响应,然后把获得的响应设置到HttpServletResponse对象中,然后tomcat就会把HttpServletResponse对象按照Http协议的格式转化成一个字符串,然后通过socket写回到浏览器.

HttpServletResponse的核心方法如下.

在这里插入图片描述

注意: 对于状态码/响应头的设置要放到 getWriter / getOutputStream 之前. 否则可能设置失效.

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 06:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 06:14:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 06:14:02       82 阅读
  4. Python语言-面向对象

    2024-03-18 06:14:02       91 阅读

热门阅读

  1. 控制工程学 en 2

    2024-03-18 06:14:02       35 阅读
  2. ssh命令——安全远程连接服务

    2024-03-18 06:14:02       44 阅读
  3. 《C缺陷和陷阱》-笔记(5)

    2024-03-18 06:14:02       42 阅读
  4. 四级缓存实现

    2024-03-18 06:14:02       46 阅读
  5. IOS面试题object-c 149-152

    2024-03-18 06:14:02       33 阅读