Servlet中常用的三大API

HttpServlet

我们写 Servlet 代码的时候,首先第一步就是先创建类,继承自 HttpServlet,并重写其中的某些方法。我们实际开发的时候主要重写 doXXX 方法,很少会重写 init / destory / service。

因为这一些方法的调用时机,称为“Servlet生命周期”。Servlet生命周期可被定义为从创建直到毁灭的整个过程。具体的可以看该文章:Servlet生命周期icon-default.png?t=N7T8http://t.csdnimg.cn/duZTC

通过Ajax来构造一个请求

我们先在WEBAPP目录下新建一个html文件。至于为什么要在这个目录下,这是tomcat规定的。不同的服务器有不同的规定。

先在html中引入一个jquery cdn的min版本的链接,再写ajax的部分。重新运行服务器就可以在控制台中看到这是一个get方法,并且通过修改type的值来修改运用的方法。

同时url就代表着路径,在这里是相对路径,也就是

这里同时也可以用绝对路径来表示。

HttpServletRequest

当 Tomcat 通过 Socket API 读取 HTTP 请求(字符串),并且按照 HTTP 协议的格式把字符串解析成 HttpServletRequest 对象。

通过stringBuilder来把结果的字符串拼接起来,可以看到每个方法的具体结果。

并且最后的querystring可以直接添加上去。

前端给后端传参

1.GET query string

在前端给后端传两个数字,一个是同学的studentid,一个是classid。

通过req.getParameter,query string键值对会自动被tomcat处理成形如Map这样的结构,后续就可以随时通过key来获取value了。

2.POST form

对于前端是form表单这样格式的数据,后端还是使用getParameter来获取。

 在前端完成代码,抓包看看具体的样子,并且在浏览器中输入10和20:

raw中清楚地看到form表单形成的样子。

在后端代码中与前端代码形成关联,通过req.getParameter来获取到具体的信息,这样后端就获取到了前端的信息。

form表单的信息传到tomcat服务器,tomcat构造req和resp对象,form表单中解析出来的值就存在于req对象中,通过getParameter拿到其中的值,再通过resp空对象编写响应,写回到tomcat,tomcat发响应给浏览器显示出来。

3.POST json

json是一种非常主流的数据格式,也是键值对结构。前端可以使用ajax的方式来构造出这个内容,更简单的方法就是使用postman直接构造~

例如,现在想要组织一个body:

{

classId:20,

studentId:10

}

可以使用postman直接构造出来相关的请求。

后端:

@WebServlet("/postParameter")
public class Myservlet_demo1 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int length = req.getContentLength();//定义需要从前端获取到多少字节的数据byte[] buffer = new byte[length];   //存到这样一个大小的数组中InputStream inputStream = req.getInputStream();//通过inputStream来获取到req的内容inputStream.read(buffer);                      //再通过read写到数组中String body = new String(buffer,0,length,"utf8");System.out.println("body = " + body);resp.getWriter().write(body);                  //最后再把这个构成String,打印出来}
}

最后打印出来,这样就拿到了前端的一段数据。

但是当前通过json传数据,服务器这边只是把整个body读出来,并没有按照键值对的方式来处理。使用第三方库如jackson就可以支持解析body的内容。

在maven仓库中找到Jackson

 把这个xml片段粘贴到pom.xml中就可以引入这个依赖。

此时用objectMapper.readValue就可以从body中读取出json的字符串。

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

本质上来说,三种方式前端给后端传参数都是一样的,以前通过get和form表单的写法很多,现在通过json格式的更常见。

HttpServletResponse

核心方法:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311564.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python:日期和时间类型学习

背景 在非开发环境经常需要做一下日期计算,就准备使用Python,顺便记下来学习的痕迹。 代码 1 1 # coding utf-82 2 3 3 from datetime import *4 4 5 5 ########################## 日期 ##########################6 6 date_now date.today()…

GAMES101:作业4记录

文章目录 总览算法编写代码:recursive_bezier()的实现Bezier()函数的实现提高部分:反走样 总览 Bzier 曲线是一种用于计算机图形学的参数曲线。在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bzier 曲线 (当你正确实现该算法时,…

第九课:机器学习与人工智能、计算机视觉、自然语言处理 NLP及机器人

第九课:机器学习与人工智能、计算机视觉、自然语言处理 NLP及机器人 第三十四章:机器学习与人工智能1、分类 Classification2、做分类的算法 分类器 Classifier3、用于分类的值是特征 Feature4、特征值种类叫做标记数据 Labeled data5、决策边界 Decisio…

SpringBoot 医药咨询系统

概述 智慧医药系统(smart-medicine)是一个基于 SpringBoot 开发的Web 项目。整体页面简约大气,增加了AI医生问诊功能,功能设计的较为简单。 开源地址 https://gitcode.net/NVG_Haru/Java_04 界面预览 功能介绍 游客功能介绍 …

AIGC重塑基础设施,高密数据中心为何众望所归?

凯文凯利在《必然》中认为,科技在本质上有所偏好,使得它朝往某种特定方向。 毫无疑问,进入到数字经济时代,人工智能技术飞速发展与加速应用之际,这个特定方向逐渐明朗:即算力科技,算力已经成为…

Linux shell编程学习笔记38:history命令

目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history:显示命令历史列表2.2 history -a:将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c&#xf…

训狗技术从初级到高级,专业有效的训狗训犬教程

一、教程描述 现在大部分人家里都会养些宠物,比如狗狗,虽然狗狗的一些行为习惯跟遗传有关,但是主人后天的影响也会给狗狗带来改变,本套教程教你纠正狗狗的不良行为,可以让你与狗愉快地玩耍。本套训狗教程,…

程序员必备IDEA插件,什么是是IDE?

IDEA是一款功能强大的集成开发环境(IDE)插件,它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。 我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天就给大家介绍一款IDEA插件&#xff…

2023年成都市中等职业学校学生技能大赛“网络搭建及应用”赛项竞赛样卷

2023年成都市中等职业学校学生技能大赛 “网络搭建及应用”赛项竞赛样卷 (总分1000分) 目录 2023年成都市中等职业学校学生技能大赛 “网络搭建及应用”赛项竞赛样卷 网络建设与调试项目(500分) 服务器搭建与运维项目(…

Rust学习笔记002: 猜字游戏

version0.1 // 导入标准库中的 io 模块,它包含了输入输出相关的功能 use std::io;// 程序的入口点 fn main() {println!("Guess the number!");println!("Please input your guess.");// 创建一个可变的字符串变量 guess,用于存储用…

【2023年终总结】谈谈一个新人眼里的阿里方法论

写在开头 2023年转眼就过去了,今年我从一名大学生转变某阿里系大厂的“搬砖打工人”,这一转变真的是给我“涉世未深的纯洁心灵”带来了大大的“震撼”。 角色的转变是需要时间进行“内部消化”的。无论是对于个人的价值认知或者是行为方式来说&#xf…

液晶时钟设计

#include<reg51.h> //包含单片机寄存器的头文件 #include<stdlib.h> //包含随机函数rand()的定义文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit RSP2^0; //寄存器选择位&#xff0c;将RS位定义为P2.0引脚 sbit RWP2^1; //读写选…