Servlet执行原理和API详解

news2024/11/17 15:30:53

一、HttpServlet

我们写 Servlet 代码的时候, 首先第⼀步就是先创建类, 继承⾃ HttpServlet, 并重写其中的某些方法.
在这里插入图片描述

1.1核心方法

在这里插入图片描述

1.2处理GET或POST请求

在这里插入图片描述

1.3数据的两种提交方式

数据提交有两种方式:

  1. form 表单提交
  2. ajax 提交

1.3.1form 表单提交

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
form表单提交的是整个页面,当数据进行提交之后,页面就消失了。
在这里插入图片描述
在这里插入图片描述

1.3.2 ajax提交

使用ajax请求不需要刷新整个页面
在这里插入图片描述
在这里插入图片描述

二、HttpServletRequest

2.1核心方法

在这里插入图片描述

2.1.1String getProtocol()

返回请求协议的名称和版本。
在这里插入图片描述
在这里插入图片描述

2.1.2String getMethod()

返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。
在这里插入图片描述
在这里插入图片描述

2.1.3String getRequestURI()

在这里插入图片描述
在这里插入图片描述

2.1.4String getContextPath()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.5 String getQueryString()

在这里插入图片描述
在这里插入图片描述

2.2 获取json格式的参数

使用之前的getParameter获取:
在这里插入图片描述
在这里插入图片描述
发现使用getParameter方式获取不到json格式的参数
则有下:
使用 InputStream 获取 JSON 参数:

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
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("/postjson")
public class JsonPostServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置返回类型和编码
        resp.setContentType("text/html;charset=utf-8");

        //1.得到数据流
        ServletInputStream inputStream = req.getInputStream();
        //2.使用数组接收数据流
        byte[] bytes = new byte[req.getContentLength()];
        inputStream.read(bytes);
        //3.将数组转换为字符串(对象)
        String result = new String(bytes,"utf-8");
        System.out.println(result);
        
        resp.getWriter().println(result);
    }
}

在这里插入图片描述
拿到json格式的参数,接下来就需要将json字符串转换为对象

2.3将json字符串转换为对象

使用jackson
jackson的主要用途:
1.将对象转换为json字符串
2.将json字符串转换为对象

2.3.1jackson的配置

将jackson引入的项目中
1.在中央仓库中选择
在这里插入图片描述
2.将其引入pom.xml中
在这里插入图片描述

2.3.2jackson的使用介绍前置知识

1.将对象转换为json字符串
在这里插入图片描述
在这里插入图片描述
2.将json字符串转换为对象
在这里插入图片描述
在这里插入图片描述

2.3.3回到项目中

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;

@WebServlet("/postjson")
public class JsonPostServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置返回类型和编码
        resp.setContentType("text/html;charset=utf-8");

        //1.得到数据流
        ServletInputStream inputStream = req.getInputStream();
        //2.使用数组接收数据流
        byte[] bytes = new byte[req.getContentLength()];
        inputStream.read(bytes);
        //3.将数组转换为字符串(对象)
        String result = new String(bytes,"utf-8");
        System.out.println(result);
        //4.将字符串转换为对象(字典)
        ObjectMapper objectMapper = new ObjectMapper();
        HashMap<String,String> map = objectMapper.readValue(result,HashMap.class);

        System.out.println("用户名:" + map.get("username"));
        System.out.println("密码:" + map.get("password"));

        resp.getWriter().println("用户名:" + map.get("username") + "|密码:" + map.get("password"));
    }
}

结果如下:将json字符串转换为了对象
在这里插入图片描述

2.3.4将前后端代码修改为json格式

前端:
在这里插入图片描述
后端:
在这里插入图片描述

三、HttpServletResponse

核心方法:
在这里插入图片描述

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

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

相关文章

瑞萨e2studio(24)----电容触摸配置(1)

瑞萨e2studio.20--电容触摸配置1 概述硬件准备新建工程工程模板保存工程路径芯片配置工程模板选择时钟配置添加TOUCH驱动配置CapTouch开启调优界面启动 CapTouch 调优通过电容触摸点亮LED 概述 这篇文档将创建一个使用 e2 studio 集成 QE 的电容式触摸应用示例&#xff0c;通…

C语言函数大全-- s 开头的函数(3)

C语言函数大全 本篇介绍C语言函数大全-- s 开头的函数&#xff08;3&#xff09; 1. sleep 1.1 函数说明 函数声明函数功能unsigned int sleep(unsigned int seconds);它是 C 语言标准库中的函数&#xff0c;用于使当前进程挂起一定的时间。在挂起期间&#xff0c;操作系统…

移动宽带安装说明一(刘欣)

2023年&#xff0c;五一假期给老家和父母家安装了2次宽带&#xff0c;记录一下吧。 一、移动光改覆盖率已经很高了 从当初的铁通“FTTB”覆盖小区,网线入户的带宽只能达到100M&#xff0c;提升到现在大面积的光改完成&#xff0c;普遍是光猫&#xff08;光纤MODEL&#xff09…

网络协议与攻击模拟-04-实施ARP攻击与欺骗

实施 ARP 欺骗和攻击 一、环境 1、 kali Linux 安装一个 arpspoof 2、win10 被攻击主机 二、 kaili 配置 kali Linux 系统是基于 debian Linux 系统&#xff0c;采用 deb 包管理方式&#xff0c;可以使用 apt 的方式进行直接从源安装 1、配置源 # 官方源 # deb http:/…

FastAPI如何区分多环境:开发/测试/预发布/生产环境

1 缘起 开始用FastAPI开发项目&#xff0c; 区分环境是部署的第一步&#xff0c;因此&#xff0c;需要区分dev/test/pre/prod等环境&#xff0c; 而FastAPI刚好提供了读取环境配置文件的参数&#xff0c;可以在启动服务时指定环境配置文件的路径&#xff0c; 参数为env_file&a…

【前端技术】Vue3 01:初识 Vue.js

Vue 可以说是非常流行了&#xff0c;至少在国内是这样&#xff0c;他是个轻量级的 JavaScript 框架&#xff0c;非常适合构建大型和中小型的 Web 应用程序&#xff0c;如果想和前端打交道&#xff0c;应该绕不过这个框架吧。 目录 1 Vue.js 介绍 2 IDE 选择 2.1 vscode 2.…

libfacedetection 人脸检测库的基本使用

目录 1、源码下载 2、编译 3、构建工程 4、个人总结 运行总结&#xff1a; 与CascadeClassifier级联分类器 人脸检测 对比: 1、源码下载 直接从github上克隆项目仓库。 git clone https://github.com/ShiqiYu/libfacedetection.git2、编译 这个项目使用了cmake脚本&#…

【LeetCode】413. 等差数列划分

413. 等差数列划分&#xff08;中等&#xff09; 思路 由于题目求的是等差数列 &#xff0c;很自然想到子数组一定满足 nums[i] - nums[i-1] nums[i-1] -nums[i-2]; 。然而我们对于 dp 数组的定义通常是以 i 结尾&#xff0c;满足某些条件的子数组数量&#xff0c;而等差数组可…

【LeetCode】300. 最长递增子序列

300. 最长递增子序列&#xff08;中等&#xff09; 方法一&#xff1a;动态规划 思路 通常来说&#xff0c;子序列不要求连续&#xff0c;而子数组或子字符串必须连续&#xff1b;对于子序列问题&#xff0c;第一种动态规划方法是&#xff0c;定义 dp 数组&#xff0c;其中 dp[…

PHP语言基础

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 一、变量和数据类型 二、运算符和表达式 三、条件语句 四、循环语句 前言 PHP是一种非常流行的开源服务器端脚本语言&#xff0c;广泛用于Web开发…

Python sys模块

sys:使用或维护解释器 版本信息 Python版本 >>> sys.version 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)]系统版本 >>> sys.platform win32 >>> 解释器版本 >>> sys.hexversion 50988016 >&g…

TypeScript 基本概念

TypeScript 是什么&#xff1f; 目标&#xff1a;能够说出什么是 TypeScript TS 官方文档 TS 中文参考 - 不再维护 TypeScript 简称&#xff1a;TS&#xff0c;是 JavaScript 的超集&#xff0c;JS 有的 TS 都有 TypeScript Type JavaScript&#xff08;在 JS 基础之上…

Linux下文件的增删查改

1.什么是文件 文件是计算机文件属于文件的一种&#xff0c;与普通文件载体不同&#xff0c;计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件文件内容文件属性。 2.文件的创建 文件的创建分为两种指令&#xff1a;touch和mkdir touch是用来创建普通文件的&am…

(C语言版)力扣(LeetCode)数组相关面试题OJ题解析

数组相关面试题 26. 删除有序数组中的重复项题目说明示例一示例二提示解析 27.移除元素题目说明示例1示例2提示解析解法一解法二 88. 合并两个有序数组题目示例一示例二示例三提示解析 结语 26. 删除有序数组中的重复项 题目 给你一个 升序排列 的数组 nums &#xff0c;请你…

Verilog HDL——Modelsim仿真

常用testbench语法 $finish 和 $stop &#xff1a; $finish任务用于终止仿真并跳出仿真器&#xff1b;$stop任务则用于中止仿真。timescale [time_unit] / [time_precision] &#xff1a;time_unit指定计时和延时的测量单位&#xff0c;time_precision则是指定仿真器的精度。#…

7.3 有源滤波电路(1)

对信号的频率具有选择性的电路称为滤波电路&#xff0c;它的功能是使特定频率范围内的信号通过&#xff0c;而阻止其它频率信号通过。有源滤波电路是应用广泛的信号处理电路。 一、滤波电路的基础知识 1、滤波电路的种类 通常&#xff0c;按照滤波电路的工作频带为其命名&am…

C语言从入门到精通第17天(指针和数组联用)

指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前&#xff0c;我们先对指针变量进行补充。我们对比一下int *p1和char *p2的区别&#xff1f; 相同点&#xff1a; 都是指针变量都是用来保存一个内存地址编…

中级软件设计师备考---软件工程1

目录 经典的模型敏捷开发方法【的分类】信息系统开发方法【的分类】结构化设计---内聚与耦合结构化设计---系统结构/模块结构 需求的分类 经典的模型 瀑布模型&#xff1a;最早的一类、适用于需求明确的项目、结构化的典型代表 原型模型&#xff1a;先构造一个建议的系统原型再…

数据治理服务及数据治理应用解决方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 一、数据治理概述 (一) 数据治理概念 数据治理是指将数据作为组织资产围绕数据全生命周期而展开的相关管控活动、绩效和风险管理工作的集合&#xff0c;以保障数据及其应用…

Nmap入门到高级【第十章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…