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 {
    @Override
    protected 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

核心方法:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openmediavault(OMV) (24)在线网盘(2)kodcloud

简介 KodBox是可道云推出的企业级私有云存储解决方案,旨在为中小企业提供安全可控、可靠易用的一站式在线文件存储管理与协同办公平台。具体详细信息可以查看官网http://kodcloud.com/ 安装部署 kodcloud支持在多种平台进行部署,这里我使用docker镜像进行部署 hub.docker.…

Vscode —— 解决Vscode终端无法使用npm的命令的问题

在cmd中可以正常执行npm -v等指令,但是在vs code终端中,无法执行npm -v,node -v等指令 出现报错 解决办法👇 方法一:【右键单击Vscode】以【管理员身份运行】,【重启Vscode】 方法二:①【用户变量】的【path】添加npm所在路径的…

Tips:VS2022提示MSB8040 此项目需要缓解了 Spectre 漏洞的库解决方法。

1,打开Visual Studio Installer 2、点击【修改】 3、选中【单个组件】,输入Spectre,下拉到【编译 工具和运行时】进行选择(尽量寻找最新版本),然后点击【修改】进行安装(如果VS2022没有关闭&…

劫持 PE 文件:新建节表并插入指定 DLL 文件

PE格式简介 PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。PE格式衍生于早期建立在VAX(R)VMS(R)上的COFF(Common Object File Format)文件格式。 Portable 是指对于不同的Windows版本和不同的CPU类型上…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#) Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率 Baumer工业相机通过NEOAPI…

Radar System Pro - Plug Play Solution

Radar System Pro是一款功能多样且可定制的资源,旨在通过功能齐全且易于使用的雷达系统增强您的Unity项目。无论您是在开发第一人称射击游戏、策略游戏还是太空探索模拟器,我们的雷达系统都将为您提供所需的工具,以创建引人入胜且身临其境的体验。 雷达系统是一个模块化资产…

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前文链接: ​​开源可观测性平台Signoz系列(一)【开篇】​​ ​​开源可观测性平台Signoz&…

40道MyBatis面试题带答案(很全)

1. 什么是MyBatis (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接…

前端vue uni-app使用Vue和ECharts构建交互式树形结构图

题目:使用Vue和ECharts构建交互式树形结构图 摘要:本文介绍了如何使用Vue.js和ECharts构建一个交互式的树形结构图。通过整合ECharts的强大可视化功能,我们创建了一个可拖拽移动、点击展开和收缩的树形结构图,并实现了无限添加子…

ROS学习记录:用C++实现对wpr_simulation软件包中机器人的运动控制

一、在工作空间下输入catkin_make进行编译 二、在工作空间中输入source ./devel/setup.bash后回车 三、机器人的运动控制在wpr_simulation中有一个例子程序,在工作空间中输入: roslaunch wpr_simulation wpb_simple.launch后回车 四、就会启动一个仿真环…

计算机毕业设计 基于HTML5+CSS3的在线英语阅读分级平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【Maven】下载及配置

文章目录 1. 定义2. 下载3. 解压4. 配置环境变量5. 验证6. 特性 1. 定义 Maven 是一个跨平台的项目管理工具。作为 Apache 组织的一个颇为成功的开源项目,其主要服务于基于 Java 平台的项目创建,依赖管理和项目信息管理,是一个自动化构建工具…

HTML---利用CSS3制作网页动画

文章目录 目录 文章目录 本章目标 一.CSS3概述 CSS函数概述 二.CSS3变形 transform属性 translate():平移函数 scale():缩放函数 rotate():旋转函数 skew():倾斜函数 三.CSS3过渡 四.CSS动画 练习 旋转按钮 本章目标 会使用…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例:Hello World! 新建一个express.js的文件,写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分:数据安全防护(30%) 第二部分:数据安全管理(30%) 第三部分:数据安全处置(40%) 项目介绍…

Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)

Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python) 文章目录 Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)Introduction 导言Iterable VS Iterator为什么 Python 有这种特殊的设计special design?如何获取迭代器Iterator&#xff1f…

SpringCloud 和 Linux 八股文第三期五问五答

SpringCloud 和 Linux 八股文第三期五问五答 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的! ⭐点赞⭐收藏⭐不迷路!⭐ 1)Linux常用命令 2)如何查看测试项目的日志 一…

Docker (compose、安装、常用命令整理、compose编排) -day06

一、概念 Docker-Compose就是容器编排,负责实现对Docker容器集群的快速编排 Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 可以很容易地用一…

Python数值型字符串校验

从键盘输入一行字符串,编写Python代码判定字符串是python“合法”数值。 (笔记模板由python脚本于2023年12月25日 18:00:52创建,本篇笔记适合熟悉Python符串基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.py…

2023年终总结 —— 我和CSDN相遇的第一年之“技术学习和个人成长的回顾与展望”

​ ​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 🎊对2023的总结与回顾🎊 🏅获奖记录 📚学…