ssm框架之SpringMVC:浅聊获得参数以及获得请求头参数

前面聊过了SpringMVC,以及通过实例演示了SpringMVC如何搭建,如果对环境搭建不太了解的话,可以看一下前面的文章(下面演示的例子,环境都是通过上面的例子进行演示的):传送阵

在使用javaweb项目原生是servlet中,对应请求地址,返回的数据的页面之前都是在web.xml,新版本可以通过注解进行配置了。需要了解servlet可以看一下前面的文章:传送阵

获得参数

原生ServletAPI

其实这个说是原生,其实还是SpringMVC进行的一些简单包装处理。

还是老规矩先来例子:

@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(HttpServletRequest request){
      System.out.println(" ======="+request);
      System.out.println(" ======="+request.getMethod());
     return "index";
    }
}    

访问地址:

http://localhost:8080/testSpringMVC_war/test/a?username=张三

然后看一下后台结果

在这里插入图片描述

因为springMVC如果方法带有HttpServletRequest的参数,会直接将其赋值,然后可以在方法种使用这个servletAPI的一些方法,不过不太建议,毕竟已经开始使用框架了,还使用之前的API,几乎没用什么意义。

直接形参

这个是springMVC的框架得到参数的方法方式

请求参数 和 形式参数名字相同

如果映射的方法中形参和url参数名一样的话,可以直接使用的,用例子演示:

@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(String username){

       System.out.println(" ======="+username );
     return "index";
    }
}

然后访问地址:http://localhost:8080/testSpringMVC_war/test/a?username=张三

在这里插入图片描述

请求参数 和 形式参数名字不相同

如果请求参数和形参不一样的话,自然也有可以处理的方式,这个需要使用的注解@RequestParam

@RequestParam 也有常用的三个属性
    
     value:这个时表示url中参数的值
     defaultValue: url参数默认值
     required 这个属性值为布尔值, 为false的时候,且未获取到参数,则使用 defaultValue. 

还是来一个例子演示:

@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(@RequestParam(value = "user",required=true) String username,@RequestParam( value = "pwd",required = false,defaultValue = "123456") String password){
        System.out.println(" ======="+username+"======"+ password );

     return "index";
    }
}

然后访问地址:http://localhost:8080/testSpringMVC_war/test/a?user=张三&psd=111111

在这里插入图片描述

补充—可以直接参数封装为对象(POJO)

这个是有一个前提,那就是对象的属性名,和请求参数的名字一致。不管是 GET 或 POST 的x-www-urlencode 均可。

首先创建一个对象:

package com.xzd.dome;

public class User {
    String username;
    String password;
 
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(User user){
//        System.out.println(" ======="+username+"======"+ password );
        System.out.println(user);

     return "index";
    }
}

地址:http://localhost:8080/testSpringMVC_war/test/a?user=张三

这个是故意写一个属性值,来测试一下,是否会使用默认值。看一下结果:

在这里插入图片描述

注意:对象类中,如果没有带有参数的构造方法,或者set方法就不会自动封装。

封装成Map

有时候传递的参数很多,有没有对应的类,同时不想在映射的方法中放置很多形参,那么可以捡起封装为Map。需要使用的一个注解是:@RequestParam。无论是GET/POST 都是可以的。

来例子演示:

@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(@RequestParam Map<String,String> map){
        System.out.println(map);

     return "index";
    }
}

然后请求地址:http://localhost:8080/testSpringMVC_war/test/a?username=张三&psw=1234&sex=男

看一下后台结果:

在这里插入图片描述

获得请求参数

RequestHeader

这个使用对道了注解@RequestHeader。如果请求头不知道有什么东西,可以看前面的文章:传送阵

@RequestHeader 也有常用的三个属性
    
     value:这个时表示请求头中参数的值
     defaultValue: 请求头默认值
     required 这个属性值为布尔值, 为false的时候,且未获取到参数,则使用 defaultValue. 

还是老规矩来一个例子:

@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(@RequestHeader("Cookie") String cookie){
        System.out.println("cookie="+cookie);

     return "index";
    }
}

访问地址:http://localhost:8080/testSpringMVC_war/test/a

在这里插入图片描述

CookieValue

还有一个注解是处理cookie的,因为cookie中有可能会含有很多键值对,所以通过这个注解可以得到,而不像是RequestHeader得到所有的键值对。

@CookieValue 也有常用的三个属性
    
     value:这个时表示cookie中参数的值
     defaultValue: cookie默认值
     required 这个属性值为布尔值, 为false的时候,且未获取到参数,则使用 defaultValue. 

来一个例子:

@Controller
@RequestMapping(value = "/test" )
public class controller {
    @RequestMapping("/a")
    public String test(@CookieValue(value = "JSESSIONID") String jsessionId){
        System.out.println("JSESSIONID="+jsessionId);
     return "index";
    }
}

访问地址:http://localhost:8080/testSpringMVC_war/test/a

在这里插入图片描述

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

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

相关文章

图解PMP项目管理马斯洛需求层次理论在公司管理中的应用!

马斯洛的需求层次结构是心理学中的激励理论&#xff0c;包括人类需求的五级模型&#xff0c;通常被描绘成金字塔内的等级。 从层次结构的底部向上&#xff0c;需求分别为&#xff1a;生理&#xff08;食物和衣服&#xff09;&#xff0c;安全&#xff08;工作保障&#xff09;…

stm32下载代码到单片机上需要调节BOOT为什么模式

一、BOOT模式选择图解 二、BOOT模式介绍 所谓启动&#xff0c;一般来说就是指下好程序后&#xff0c;重启芯片时&#xff0c;SYSCLK的第4个上升沿&#xff0c;BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态&#xff0c;来选择在复位后的启动模式。 A. Mai…

MongoDB 聚合管道中使用数组表达式运算符合并数组($concatArrays)

数组表达式运算符主要用于文档中数组的操作&#xff0c;接上一篇&#xff1a;MongoDB 聚合管道中使用数组表达式运算符&#xff08;$slice截取数组&#xff09;https://blog.csdn.net/m1729339749/article/details/130130328本篇我们主要介绍数组表达式运算符中用于合并数组的操…

LMKD分享

背景 Android是一个多任务系统&#xff0c;可以同时运行多个程序&#xff0c;一般来说&#xff0c;启动运行一个程序是有一定的时间开销的&#xff0c;因此为了加快运行速度&#xff0c;当你退出一个程序时&#xff0c;Android并不会立即杀掉它&#xff0c;这样下次再运行该程…

【论文阅读】3D-LaneNet

【论文阅读】3D-LaneNet 主要要做的事情就是 lane detection。这里提一下 BEV&#xff08;Bird‘s Eye View&#xff09; 感知算法&#xff0c;为了将 2D 图像映射到 3D 空间中&#xff0c;能够更准确的检测物体位置&#xff0c;需要 BEV 感知的结果。后续还会继续了解这方面内…

企业数据安全能力建设思路

在现代社会&#xff0c;企业数据安全已经成为一个非常重要的话题。企业数据安全能力的建设是每个企业都必须面对和解决的问题。企业数据安全能力建设思路包括以下几个方面&#xff1a; 1. 建立完善的安全管理制度 企业要建立完善的安全管理制度&#xff0c;包括信息安全政策、…

注册claude AI账号 slack工作区账号

Claude 是建立在 slack工作区的一个AI人工助手&#xff0c;更像是将chatgpt集成到了会议模式&#xff0c;一个账号实际上拥有了你的会议室和你的AI助手&#xff0c;你可以让你的朋友和同事进入你的房间体验。 Claude是不是openai的产物&#xff1f;目前还不知道&#xff0c;不…

phpstudy本地环境搭建图文教程

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

价值迭代求解马尔可夫决策过程

Value Iteration Algorithm 其算法思想是: 在每一个状态s下&#xff0c; 之迭代算法流程如下&#xff1a; 初始化状态价值state value&#xff0c;即对每个状态的价值都赋一个初始值&#xff0c;一般是0 计算每一个状态-动作对的 动作价值函数&#xff0c;通常通过创建一个二维…

迎难而上,阿里高频考点2023Java岗面试突击手册

上周我接到一位粉丝的私信说目前互联网形势实在对他太不友好&#xff0c;感觉自己每个技术栈都会一点&#xff0c;但不是完全精通。基本二面三面的时候就挂了&#xff0c;已经完全不知道该朝哪个方向努力了&#xff0c;希望可以给他一些建议和方法指导。那么&#xff0c;本次就…

【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MySQL--表的使用--0409

目录 1.表的基本操作 1.1 创建表 2. 查看表结构 3.修改表 3.1 新增一列 3.2 修改列属性 3.3 修改名字 3.3.1 修改表名字 3.3.2 修改表内列名字 3.4删除 3.4.1 删除列 3.4.2 删除表 1.表的基本操作 查看自己目前在哪个数据库里面 mysql> select database(); 1.1 创…

基于PCA与LDA的数据降维实践

基于PCA与LDA的数据降维实践 描述 数据降维&#xff08;Dimension Reduction&#xff09;是降低数据冗余、消除噪音数据的干扰、提取有效特征、提升模型的效率和准确性的有效途径&#xff0c; PCA&#xff08;主成分分析&#xff09;和LDA&#xff08;线性判别分析&#xff0…

状态错误 MSB8040,此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体

“Spectre Mitigation”缓解错误 如果出现“Spectre Mitigation”这种错误&#xff0c;就要了解下PIPE技术&#xff1a;流水线技术&#xff0c;比如3级流水线&#xff0c;避免CPU空闲&#xff0c;不浪费时间&#xff0c;但是前提是没有跳转&#xff0c;指令都是顺序执行的&…

3.9、互斥锁(互斥量)

3.9、互斥锁&#xff08;互斥量&#xff09;1.互斥锁&#xff08;互斥量&#xff09;的介绍2. 互斥量相关操作函数3.互斥量函数的使用介绍①pthread_mutex_init②pthread_mutex_destroy③pthread_mutex_lock④pthread_mutex_trylock⑤pthread_mutex_unlock3.利用互斥锁实现线程…

王小川,才是深「爱」李彦宏的那个人?

在推出中国首个类ChatGPT产品「文心一言」后&#xff0c;李彦宏在接受专访时断言&#xff0c;中国基本不会再出一个OpenAI了&#xff0c;「创业公司重新做一个ChatGPT其实没有多大意义&#xff0c;基于大语言模型开发应用机会很大&#xff0c;没有必要再重新发明一遍轮子。」 听…

SPARQL endpoint with Ontop CLI部署,python使用SPARQLWrapper

Ontop CLI部署&#xff0c;避免踩坑0.前言1.提示2.详细部署流程3.python操作4.碎碎念0.前言 教程&#xff1a;Setting up an Ontop SPARQL endpoint with Ontop CLI照着教程来&#xff0c;不知道为啥&#xff0c;总是报错&#xff0c;后来发现&#xff0c;手机搜到的跟电脑不一…

pytorch 数据类型

文章目录一、tensor如何表示字符串数据类型类型判断Dimension 0Dimension 1Dimension 2Dimension 3Dimension 4mixed二、创建Tensorimport from numpyimport from listuninitialized 未初始化set default typerand/rand_like, randintfulllinspaceindex切片三、维度变换总结一、…

尚硅谷大数据技术Scala教程-笔记04【集合】

视频地址&#xff1a;尚硅谷大数据技术之Scala入门到精通教程&#xff08;小白快速上手scala&#xff09;_哔哩哔哩_bilibili 尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】尚硅谷大数据技术Scala教程-笔记02【函数式编程】…

交换机Access模式和Trunk模式配置演示

一.Access配置 1.创建VLAN 2.设置为接口模式&#xff0c;将接口划入不同VLAN 3.测试 二.Trunk配置 1. 接口VLAN配置 2.设置允许VLAN流量通过&#xff0c;可写all 3.测试 一.Access配置 实现VLAN10 和 VLAN20之间通信隔离 1.创建VLAN [s1]vlan 10 [s1]vlan 20[s1]vlan…