SpringMVC系列五: SpringMVC映射请求数据

SpringMVC映射请求数据

  • 💞获取参数值
    • 说明
    • 应用实例
  • 💞获取http请求消息头
  • 💞获取JavaBean对象
    • 使用场景说明
    • 应用实例
    • 注意事项和细节
  • 💞获取servlet api
    • 说明
    • 应用实例
    • 注意事项和细节

上一讲, 我们学习的是SpringMVC系列四: Rest-优雅的url请求风格

现在打开springmvc项目

在这里插入图片描述

💞获取参数值

说明

开发中, 如何获取到http://ip:port/url?参数名=参数值&参数名=参数值

应用实例

1.com.zzw.web.requestParam新建VoteHandler

@RequestMapping("/vote")
@Controller
public class VoteHandler {/*** 解读* 1.获取到超链接传递的数据 请求 http://localhost:8080/springmvc/vote/vote01?name=xx* 2.@RequestParam 表示会接收提交的参数* 3,value="name" 表示提交的参数名是name* 4.required=false 表示该参数可以没有; 默认是true, 表示必须有这个参数* 5.当我们使用了 @RequestParam(value="name", required=false)后 请求的参数名和方法的形参名可以不一致*/@RequestMapping(value = "/vote01")public String test01(@RequestParam(value = "name", required = false) String username) {System.out.println("得到username=" + username);return "success";}
}

2.web路径下新建request_parameter.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>测试 request parameter</title>
</head>
<body>
<h2>获取到超链接参数值</h2>
<hr>
<a href="vote/vote01?name=zzw">获取超链接的参数</a>
</body>
</html>

3.Postman测试

get方式提交
在这里插入图片描述post方式提交
在这里插入图片描述

💞获取http请求消息头

●说明
1.在开发中, 如何获取到http请求的消息头信息
2.使用较少

案例
1.修改VoteHandler.java, 增加方法 test02

@RequestMapping("/vote")
@Controller
public class VoteHandler {/*** 需求: 获取http请求头信息, 获取到Accept-Encoding 和 Host* [涉及到知识点 http协议]* @param a1* @param a2* @return*/@RequestMapping(value = "/vote02")public String test02(@RequestHeader("Accept-Encoding") String a1, @RequestHeader("Host") String a2) {System.out.println("Accept-Encoding=" + a1);System.out.println("Host=" + a2);//返回一个结果return "success";}
}

2.修改request_parameter.jsp

<h2>获取到消息头</h2>
<a href="vote/vote02">获取到Http消息头信息</a>

3.Postman测试
在这里插入图片描述

💞获取JavaBean对象

使用场景说明

开发中, 如何获取到javabean对象, 就是以前的entity/pojo对象数据

应用实例

1.com.zzw.web.requestParam.entity包下新建Pet

public class Pet {private Integer id;private String name;//setter, getter, toString方法
}

2.同包下新建Master

public class Master {private Integer id;private String name;private Pet pet;//对象的属性是另外一个对象[涉及到属性级联]//setter, getter, toString方法
}

3.修改VoteHandler.java, 增加方法 test03

public class VoteHandler {/*** 演示如何获取到提交数据->封装成java对象* 说明* 1.方法的形参用对应的类型来指定即可, SpringMVC会自动的进行封装* 2.如果要自动地完成封装, 要求提交的数据, 参数名和对象的字段名保持一致* 3.如果属性是对象, 这里仍然是通过 字段名.字段名 比如Master [pet]*   , 即提交的数据 参数名 是 pet.id pet.name, 这就是级联操作* 4.如果提交的数据 的参数名和对象的字段名不匹配, 则对象的属性值就是null* @return*/@RequestMapping(value = "/vote03")public String test03(Master master) {System.out.println("master=" + master);//返回结果return "success";}
}

4.修改request_parameter.jsp

<%--解读
1.这是一个表单, 表单的数据对应Master对象
2.提交的数据参数名和对象的字段名一致即可
--%>
<h1>添加主人信息</h1>
<form action="vote/vote03" method="post">主人:<input type="text" name="id"/><br/>主人:<input type="text" name="name"/><br/>宠物名:<input type="text" name="pet.id"/><br/>宠物名:<input type="text" name="pet.name"/><br/><input type="submit" value="添加主人和动物"/>
</form>

5.Postman测试

get方式提交
在这里插入图片描述post方式提交
在这里插入图片描述

注意事项和细节

1.支持级联数据获取
2.表单的控件名称name需要和javabean对象名称呼应, 否则就是null

💞获取servlet api

说明

1.开发中, 我们可以需要使用到原生的servlet api
2.使用servlet api, 需要引入tomcat/lib下的servlet-api.jar

应用实例

1.修改VoteHandler.java, 增加方法 test04

@RequestMapping("/vote")
@Controller
public class VoteHandler {/*** 使用servlet api, 来获取提交的数据* @param request* @param response* @return*/@RequestMapping(value = "/vote04")public String test04(HttpServletRequest request,HttpServletResponse response) {String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("username=" + username);System.out.println("password=" + password);//返回结果return "success";}
}

2.修改request_parameter.jsp

<h1>演示 servlet api的使用</h1>
<form action="vote/vote04" method="post">用户名:<input type="text" name="username"/><br/>密 码:<input type="password" name="password"/><br/><input type="submit" value="提交"/>
</form>

3.Postman测试

post方式提交
在这里插入图片描述

注意事项和细节

1.除了HttpServletRequest, HttpServletResponse其它对象还可以以这样的方式获取
2.HttpSession, java.security.Principal, InputStream, OutputStream, Reader, Writer
3.其中一些对象也可以通过 HttpServletRequest / HttpServletResponse对象获取, 比如Session对象, 既可以通过参数传入, 也可以通过request.getSession()获取, 效果一样, 推荐使用参数形式传入, 更加简单明了

@RequestMapping("/vote")
@Controller
public class VoteHandler {/*** 使用servlet api, 来获取提交的数据* @param request* @param response* @return*/@RequestMapping(value = "/vote04")public String test04(HttpServletRequest request,HttpServletResponse response,HttpSession session2) {//获取到session//servlet的原生的方式HttpSession session = request.getSession();System.out.println("session=" + session);//注意: 通过参数传入的 session2 和 通过request.getSession()得到的 session对象是同一个System.out.println("session2=" + session2);//返回结果return "success";}
}

在这里插入图片描述

下一讲, 我们学习 SpringMVC系列六: 视图和视图解析器

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

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

相关文章

VUE 项目用 Docker+Nginx进行打包部署

一、Docker Docker 是一个容器化平台&#xff0c;允许你将应用程序及其依赖项打包在容器中。使用 Docker&#xff0c;你可以创建一个包含 Vue.js 应用程序的容器镜像&#xff0c;并在任何支持 Docker 的环境中运行该镜像。 二、Nginx Nginx 是一个高性能的 HTTP 服务器和反向…

Eureka 学习笔记(1)

一 、contextInitialized() eureka-core里面&#xff0c;监听器的执行初始化的方法&#xff0c;是contextInitialized()方法&#xff0c;这个方法就是整个eureka-server启动初始化的一个入口。 Overridepublic void contextInitialized(ServletContextEvent event) {try {init…

无声短视频:成都柏煜文化传媒有限公司

无声短视频&#xff1a;视觉艺术的独特魅力 在数字化时代的浪潮中&#xff0c;短视频以其简短、直观、易于传播的特点迅速崛起&#xff0c;成为当下最热门的媒体形式之一。而在众多的短视频类型中&#xff0c;无声短视频以其独特的视觉表达方式&#xff0c;逐渐吸引了越来越多…

Intelij IDEA中Mapper.xml无法构建到资源目录的问题

问题场景&#xff1a; 在尝试把原本在eclipse上的Java Web项目转移至Intelij idea上时&#xff0c;在配置文件均与eclipse一致的情况下出现了如下报错&#xff1a; org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.umbrella.crm_core.…

leetcode118 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] public List…

信创服务器操作系统的适配迁移分析

浅谈信创服务器操作系统的适配迁移 01 服务器操作系统迁移适配流程复杂 随着CentOS停服临近和红帽RHEL源码权限受限&#xff0c;服务器操作系统安全漏洞风险加剧。国内众多企业面临CentOS、REHL等系统升级替换的挑战。同时&#xff0c;出于安全、功能升级和合规需求&#xff0…

33、循环语句--函数---递归+阶乘

一、函数 1.1、shell的函数 1.1.1、函数的定义&#xff1a;将命令序列按照格式写在一起。格式指的是函数的固定格式。两种格式。 for i in {}do命令序列doneif []then 命令序列else命令序列fi #可以作为一个命令序列作用&#xff1a;方便重复使用&#xff0c;函数库&…

CubeMx打不开

问题点&#xff1a;打开CubeMx一直这个界面&#xff0c;然后就消失了。 问题所在&#xff1a;java版本过高。 博主的版本是合适的&#xff0c;如果你的版本是17什么的肯定是不合适的。 解决方法&#xff1a;卸载重装 卸载工具站内下载&#xff0c;免安装&#xff1a;&#xf…

极速解析,精准合规 — Ada,现代C++的URL解析器

Ada&#xff1a;用Ada&#xff0c;让URL解析变得轻而易举。- 精选真开源&#xff0c;释放新价值。 概览 Ada是一个用现代C编写的快速且符合WHATWG标准的URL解析库。它通过了WHATWG网站提供的全部规范测试&#xff0c;并在包括Windows、Linux、macOS在内的多个平台上表现卓越。…

Python将Markdown格式转为HTML:轻松实现博客文章的自动化处理

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 引言 编写一篇高质量的博客文章并非易事&#xff0c;尤其是在排版和格式方面。Markdown作为一种轻量级的标记语言&#xff0c;为博主们提供了一种简洁、高效的写作方式。而Python作为一门强大的编程语言&#xff0c…

反射的原理和操作

反射是框架设计的灵魂 &#xff08;使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09;&#xff09; 在Java中&#xff0c;反射是指在运行时动态地获取、检查和操作类、对象、方法和属性的能力。J…

本地快速部署 SuperSonic

本地快速部署 SuperSonic 0. 引言1. 本地快速部署 supersonic2. 访问 supersonic3. 支持的数据库4. github 地址 0. 引言 SuperSonic融合Chat BI&#xff08;powered by LLM&#xff09;和Headless BI&#xff08;powered by 语义层&#xff09;打造新一代的BI平台。这种融合确…

C++ 66 之 类模版

#include <iostream> #include <string> using namespace std;// 习惯性 < >中 类模板用class 普通的函数模板就用typename // template<class NAMETYPE, class AGETYPE> template<class NAMETYPE, class AGETYPE int> // 可以设置默认的类型值…

【数据结构C++】表达式求值(多位数)课程设计

&#x1f4da;博客主页&#xff1a;Zhui_Yi_ &#x1f50d;&#xff1a;上期回顾&#xff1a;图 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f387;追当今朝天骄&#xff0c;忆顾往昔豪杰。 …

【机器学习】第7章 集成学习(小重点,混之前章节出题但小题)

一、概念 1.集成学习&#xff0c;顾名思义&#xff0c;不是一个玩意&#xff0c;而是一堆玩意混合到一块。 &#xff08;1&#xff09;基本思想是先 生成一定数量基学习器&#xff0c;再采用集成策略 将这堆基学习器的预测结果组合起来&#xff0c;从而形成最终结论。 &#x…

pdf怎么压缩到2m以内或5m以内的方法

PDF作为一种广泛使用的文档格式&#xff0c;已经成为我们工作和生活中不可或缺的一部分。然而&#xff0c;有时候PDF文件内存会比较大&#xff0c;给我们的存储和传输带来了很大的不便。因此&#xff0c;学会压缩 PDF 文件是非常必要的。 打开"轻云处理pdf官网"&…

js语法---理解防抖原理和实现方法

什么是防抖&#xff08;节流&#xff09; 在实际的网页交互中&#xff0c;如果一个事件高频率的触发&#xff0c;这会占用很多内存资源&#xff0c;但是实际上又并不需要监听触发如此多次这个事件&#xff08;比如说&#xff0c;在抢有限数量的优惠券时&#xff0c;用户往往会提…

Scott Brinker:API对今天的Martech用户来说「非常重要」 ,但它们对即将到来的人工智能代理浪潮至关重要

API在Martech中非常重要 猜一猜空格应该填什么&#xff1a; _______之于AI代理就像数据之于AI模型 正如你可能从我的标题猜到的那样&#xff0c;答案是API。让我们讨论一下为什么…… 数据是人工智能模型的差异化 在过去的一年半里&#xff0c;人工智能疯狂的超级炒作周期…

Repetition Improves Language Model Embeddings论文阅读笔记

文章提出了一种提高decoder-only LLM的embedding能力的方法&#xff0c;叫echo embeddingslast-token pooling&#xff08;即直接选最后一个token作为句子的embedding&#xff09;和直接mean pooling都不如文章提出的echo embedding&#xff0c;做法是把句子重复两次&#xff0…

OpenGL Super Bible 7th - Drawing Our First Triangle(绘制第一个三角形)

简介 本文的原版为《OpenGL Super Bible 7th》,是同事给我的,翻译是原文+译文的形势。文章不属于机器直译,原因在于语言不存在一一对应的关系,我将尽可能的按照中国人看起来舒服的方式来翻译这些段子,如果段子让你感到身心愉悦,那还劳烦点个关注,追个更。如果我没有及时…