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.mzph.cn/news/594353.shtml

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

相关文章

如何在Windows 10中扩展分区,这里提供步骤

一些PC制造商提供的电脑硬盘分为多个分区,一个用于Windows操作系统,另一个用于个人文件的空“数据”分区。如果你愿意,可以将这些分区合并为一个分区。 此技巧还可以用于删除恢复分区,从而释放通常用于恢复数据的空间。或者&…

【Qt之Quick模块】7. Quick基础、常用组件Item、Rectangle、Text、TextInput、TextEdit等

1. 概述 Qt Quick模块是编写QML应用程序的标准库。Qt QML模块提供QML引擎和语言基础结构,Qt Quick模块提供用QML创建用户界面所需的所有基本类型。它提供了一个可视化画布,包括用于创建和动画化可视化组件、接收用户输入、创建数据模型和视图以及延迟对…

简易五子棋的实现(C++)

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、效果图二、代码(带注释)三、说明 一、效果图 二、代码(带…

day7--java高级编程:泛型,集合:集合数组互转,迭代器,增强for循环,集合工具类

4. 泛型 4.1 泛型概述 4.1.1 生活中的例子 举例1:中药店,每个抽屉外面贴着标签 举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签 举例3:家庭厨房中: Java中的泛型,就…

Cytoscape3.8安装下载及安装教程

Cytoscape3.8下载链接:https://docs.qq.com/doc/DUmhZQ1lqTWhuSXJC 1.选中下载好的安装包右键选择“解压到 Cytoscape3.8.0”文件夹 2.打开解压好的”Cytoscape3.8.0“文件夹 3.选中“Cytoscape_3_8_0_windows_64bit.exe“右键以管理员身份运行 4.点击”Download“&…

网工内推 | 网络工程师,NP认证优先,上市公司,包吃,最高15薪

01 无锡先导智能装备股份有限公司 招聘岗位:高级网络工程师 职责描述: 1.依据项目规划方案提供硬件及网络方案设计; 2.面向客户提供网络技术支持,包括故障的解决、性能的优化、日常维护等; 3.和合作伙伴、供应商的技术…

2024.1.3 Spark on Yarn部署方式与工作原理

目录 Spark集群类型有以下几种: Spark的部署方式有以下几种: Spark on YARN的部署方式有两种:client模式和cluster模式。 Spark底层的工作原理,执行流程 Spark集群类型有以下几种: Standalone模式:这是Spark自带的…

产品Axure的安装以及组件介绍

Axure介绍: Axure是一款用户体验设计工具,可以用于创建交互式原型、线框图和设计文档。它支持快速原型开发、界面设计、信息架构、流程图和注释等功能,可以帮助设计师快速地创建和共享交互式原型,从而更好地与客户和团队协作。 …

【C++】HP-Socket(一): 下载、Linux上编译、Windows远程编译Linux版本

1、简介 国产、高性能、跨平台网络通信框架。 作者于2024-01-01更新了Release版本v5.9.4,辛苦了,向作者致敬! 源码下载: https://gitee.com/mirrors/hp-socket https://github.com/ldcsaa/HP-Socket 2、编译 2.1 在Linux上编…

《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比

前言 2024 年 啦!Vue2 也于 2023.12.31 寿终正寝 ! 然而我的 Vue3 升级一再拖延(惭愧不已)~ 赶起来吧~ 今天用 vue-cli 和 vite 分别创建了 Vue3 项目,具体实现步骤见如下两篇。 《基于 Vue Cli4.x Vue3 TS styl…

OceanBase入选Gartner®云数据库管理系统魔力象限“荣誉提及”

近日,全球IT市场研究和咨询公司Gartner发布最新报告《Magic Quadrant™ for Cloud Database Management Systems》(全球云数据库管理系统魔力象限)。全自研分布式数据库 OceanBase 入选“荣誉提及”,2022 年推出的云数据库 OB Clo…

优思学院|为什么精益生产在你的企业就不管用呢?

精益生产(Lean Production)是一种旨在提高效率、减少浪费、优化流程的生产管理理念。然而,尽管它的理念广受推崇,但在实际应用中,许多企业却发现精益生产似乎并不奏效。那么,问题出在哪里呢? 企…

基于华为ENSP模拟器-vlan划分网络

需求 不连外网的内网。需求隔离故障和隔离广播风暴,并要保证网络的连通。 解决方案使用三层交互机,设置vlan用于隔离网络,并在三层交互机为网关保证各个vlan之间的通讯。 实现 使用三层交互机,设置vlan用于隔离网络&#xff0…

TB-C/C++

1.main函数之前之后执行的代码 设置栈指针初始化静态变量和全局变量(.data段内容,已初始化且不为0)赋初值(.bss段内容,未初始化的全局变量和静态变量)传参(argc,argv)atexit() 在…

Paddle3D 2 雷达点云CenterPoint模型训练

2 Paddle3D 雷达点云CenterPoint模型训练–包含KITTI格式数据地址 2.0 数据集 百度DAIR-V2X开源路侧数据转kitti格式。 2.0.1 DAIR-V2X-I\velodyne中pcd格式的数据转为bin格式 参考源码:雷达点云数据.pcd格式转.bin格式 def pcd2bin():import numpy as npimport…

【EDA软件】国产嘉立创EDA使用

嘉立创(JLCPCB) 嘉立创(JLCPCB)提供的EDA专业版是一款在线的原理图设计与PCB设计工具,可以协助用户完成电子设计项目。以下是使用嘉立创EDA专业版的一般步骤: 注册与登录: 首先,你需…

实习知识整理11:确认订单并将订单的相关信息插入用户订单表和订单详情表

用户订单表: 订单详情表: 思路分析:首先我们需要知道当点击了确认订单按钮后,需要向后端传递哪些数据,先看用户订单表:ORDER_ID是不需要传的,这个可以在后台生成就行了;USER_ID是需要…

2023年12月GESP C++七级编程题转Python真题解析

七、2023年12月GESP C(Python)七级编程题 2023年12月GESP Python最高六级,但C与Python同级编程题相同。本篇引用2023年12月GESPC七级编程题,用Python实现。 【七级编程题1】 【试题名称】:商品交易 时间限制:1.0 s 内存限制&…

微信公众号请求获取相关权限后端代码

用微信的东西,总要避免到各种与微信那边的交互。 1.首先要有个接口,证明你是服务端(填写服务器配置) 接入概述 | 微信开放文档 主代码 /*** 服务器配置验证* param* return*/PassTokenGetMapping("/giveWxCheck")publi…

详解Vue3中的事件监听方式

本文主要介绍Vue3中的事件监听方式。 目录 一、v-on指令二、使用符号简写三、事件修饰符四、动态事件名五、常见的监听事件六、自定义事件 在Vue3中,事件监听的方式与Vue2有一些不同。 下面是Vue3中事件监听方式的详细介绍: 一、v-on指令 Vue3中仍然使…