Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式

目录

IDEA第一课(熟悉里面内容) 

建立连接 -@RequestMapping          路由映射

请求        

1.传递单个参数​编辑

2.多个参数​编辑

3.传递数组

4.传递一个集合,但是这里我们传递的时候发生了500的错误

简单介绍JSON

回顾Cookie和Session

Cookie和Session的区别

获取Cookie的两种方式

设置Session的方式

获取Session的问题

获取Http请求中的Header信息


IDEA第一课(熟悉里面内容) 

resources资源目录

static       /static 静态文件

templates  主要是配置相关的代码 /templates模版

application .properties    SpringBoot项目的配置文件-十分重要

test测试代码,注意这里是放的开发人员的测试代码,与测试人员无关

作为一名开发人员,需要对自己的代码质量负责,不能完全依赖测试QA

功能开发之后,需要先自测,自测通过才交给测试人员

注意⚠️文件夹的颜色也是有区别-蓝色与绿色的java。当然可以在下图去设置

在当前页面我们和前面学的Servlet不同,首先Spring自己带Tomcat。

其次和我们之前前往的路径也不同,原因就是看下面的日志,他写的ContentPath为""即空。

现在的Spring完全就不需要我们自己去下载Tomcat,给我们进行的一个封装,但是实际使用的还是http协议

Spring Boot是帮助我们快速构建项目的

Springmvc是其中Boot的一个模块,能用这个项目进行jAVAweb项目开发,就是一个Springmvc的一个项目,是基于Servlet进行改进的

MVC其实可以看成一种思想,通过Spring进行实现称为SpringMVC,但是当前阶段,MVC概念又发生了一些变化,后端人员不涉及前端页面的开发,所以也就没有view层,view现在又有了一层解释,之前返回的视图,现在更像是返回视图的数据。

学习SpringMVC

建立连接 -@RequestMapping          路由映射

访问地址,类的路径+方法路径(比如下面在类的前面添加了一个RequestMapping,那么类也会有路径了,/可以省略,但是推荐不要省略(标准-前加/后不加)

RequestMapping支持Post和Get都可以

@RequestMapping("/hello")
@RestController
public class HelloController {
//此时就限定必须使用Get这个方法
//注解没有写属性名字,默认就是value
    @RequestMapping(value = "/sayhi",method = RequestMethod.GET)
    public String sayHi(){
        return "hi,SpringBoot";
    }
}
请求        
1.传递单个参数

底层逻辑:从请求的参数中,获取参数名为name的值,并且给name赋值

2.多个参数

多个参数也是一样,顺序无所谓,注意⚠️哈我说的是age可以和那个name换

但是如果使用基本基本类型,必须要学会传值,不传值就会报错。所以开发的时候我们统一建议使用包装类

后端参数重命名-必定需要传的(如果使用了重命名-就必须要使用@RequestParam注解里的名字。假如你与注解的名字不同,则会报400的错误

如果我们像下图一样进行改动,那么虽然不会报错,但是会传不过来参数,即默认的空

  public  String m5(@RequestParam(value = "name",required = false) String username){
        return "接收到的参数:"+username;
    }

以上写的,就是在web交互,也就可以说是SpringMVC

注意哈url后面的问号查询字符串

3.传递数组

当我们请求中,同一个参数有多个的时候

4.传递一个集合,但是这里我们传递的时候发生了500的错误

5开头的通常是服务端发生错误

4开头的往往是客户端发生错误

如果看到5开头的错误,第一反应去看后端日志,后端日志从下往上看,一段一段的看,先看最后一段的首行

他的意思是,他的默认是传递一个数组,而不是一个集合,所以需要一个注释,来声明它是一个集合,这样,他就会可以用集合了

 @RequestMapping("/m6")
    public  String m7(@RequestParam List<String> listParam){
    return "接收到的参数ListParam:"+listParam+"长度"+listParam.size();
    }

简单介绍JSON

本质上是一个字符串,表示对象的字符串,通常称为JSON字符串

假如要传递注解,就要使用一个RequestBody

public  String m4(@RequestBody Person person){
        return "接收到的参数:"+person.toString();
    }

获取URL中的参数

可以获取一个,也可以获取多个获取多个就要自己去填写,但是说需要注意他们的顺序,而且选择了顺序之后,就需要往请求里面填写东西(不能少填写)

把文件传递到,当地的文件夹中,相当于我们平时下载的

 public String m10(@RequestPart MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());
        file.transferTo(new File("/Users/lcl/Desktop/py/" +file.getOriginalFilename()));
        return "success";
    }

回顾Cookie和Session

Http是无状态的->http没有记忆功能的,现在的请求和过一会的请求,同样的请求参数,得到的结果是一样的->处理逻辑是一样的,而不是指数据。

Cookie是客户端机制,Session是服务器端机制 ,他们会常常结合在一起使用。

Http是无状态的-http没有记忆功能,现在请求和过一会的请求,同样的请求参数,得到的结果是一样的->处理逻辑是一样

Cookie(相当于是一个学生证,能够查到你的信息)

理解Session(服务器机制,根据你的xx,有你的信息就能够查到你)

首先先要理解什么是会话​​​​​​​

在计算机领域,会话是一个客户与服务器之间不中断的请求响应,服务器能够识别出来请求来自同一个用户,当一个未知的用户向Web应用程序发送第一个请求时,就开始了一个会话,当用户明确结束会话或服务器有一个时限内,没有收到任何用户的任何请求的时候,会话就结束了。

Cookie和Session的区别

Cookie是客户端保存信息的一种机制,Session是服务器端保存用户信息的一种机制

Cookie和Session之间主要通过SessionId关联起来的,SessionId是Cookie和Session之间的桥梁

Cookie和Session经常会在一起配合使用,但不是必须配合

获取Cookie的两种方式
下面是两种方式拿到Cookie,第一种是拿到全部的Cookie. 
@RequestMapping("/getCookie")
    public String getCookie(HttpServletRequest request){
        Cookie[]cookies= request.getCookies();
//        for(Cookie cookie:cookies){
//            System.out.println(cookie.getName()+":"+cookie.getValue());
//        }
        if (cookies!=null) {
            Arrays.stream(cookies).forEach(cookie -> {
                System.out.println(cookie.getName() + ":" + cookie.getValue());
            });
        }
        return "获取cookie成功";
    }


    //使用注解的第二个方式,只能一个一个拿
    @RequestMapping("/getCookie2")
public String getCookie2(@CookieValue String bite,@CookieValue String aaa){
        return "cookie存取的值"+bite+",aaa"+aaa;
    }
设置Session的方式
 public String setSession(HttpServletRequest request){
        HttpSession session= request.getSession();
        session.setAttribute("username","zhangsan");
        return "success";
    }
获取Session的问题
//方法1:(原始版本,刚开始session为空。)
@RequestMapping("/getSession")
    public String getSession(HttpServletRequest request){
    HttpSession session= request.getSession(false);
    if(session!=null){
        String username=(String) session.getAttribute("username");
        return "登录用户"+username;
    }
    return "session为空";
}
方法2:
@RequestMapping("/getSession2")
//默认是一个必须传递的参数,所以加上false(这样你不传递参数也不会报错)
public  String getSession2(@SessionAttribute (required = false) String username){
        return "username:"+username;
}
方法3: Spring有一个内置的对象,和第一种方式相像,可以直接使用HttpSession等同于第一种的那个
request.Session(true)
@RequestMapping("/getSession3")
//内置对象,在需要的时候,加上即可,不需要的时候可以不写
public String getSesson3(HttpSession session){
        String username=(String) session.getAttribute("username");
        return "登入用户"+username;
}
获取Http请求中的Header信息
@RequestMapping("/getHeader")
public  String getHeader(HttpServletRequest request){
//User-Agent相当于是一个key
       String userAgent= request.getHeader("User-Agent");
       return "userAgent"+userAgent;
}
@RequestMapping("/getHeader2")
public String getHeader(@RequestHeader("User-Agent")String userAgent){
        return "userAgent"+userAgent;
}

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

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

相关文章

Docker 中OpenResty下载与使用

1Panel安装OpenResty 查看到就说明安装成功 部署项目 在http中添加&#xff1a; server { listen 8001; //端口号 server_name localhost; location / { root /admin; //项目路径 index index.html index.htm; …

python appiumn 自动化测试 入门

资源下载 链接&#xff1a;https://pan.baidu.com/s/1zl1yXYna73RAL-V0PQ9xHA 提取码&#xff1a;syjg 安装JDK 不详细说了 配置Android SDK 新建 ANDROID_HOME配置对应的SDK路径 新增PATH 安装python库 pip install Appium-Python-Client报如图错误的话可以使用 pytho…

【SpringCloud】为什么选择微服务?

一般的平台会遇到的问题&#xff1a; 服务配置复杂。基础服务多&#xff0c;服务的资源配置复杂&#xff0c;传统方式管理服务复杂 服务之间调用复杂。检索服务、用户中心服务等&#xff0c;服务之间的调用复杂&#xff0c;依赖多 服务监控难度大。服务比较多&#xff0c;…

前端实现菜单快速检索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

Spark-06:共享变量

目录 1.广播变量&#xff08;broadcast variables&#xff09; 2.累加器&#xff08;accumulators&#xff09; 在分布式计算中&#xff0c;当在集群的多个节点上并行运行函数时&#xff0c;默认情况下&#xff0c;每个任务都会获得函数中使用到的变量的一个副本。如果变量很…

为何越来越多的程序员纷纷转行网络安全?

目前&#xff0c;我国IT行业的人才结构不断升级&#xff0c;公司对程序员的要求越来越高&#xff0c;出现了大量的裁员现象&#xff0c;导致很多的程序员纷纷想转行的想法。 可能对于早期的程序员而言&#xff0c;学好编程语言就能找到比较好的工作。而现在伴随着互联网的不断发…

vue - - - - - vue-qr插件生成二维码

vue-qr插件生成二维码 1. 安装插件2. 组件使用示例图&#xff1a;扫码结果 1. 安装插件 【vue-qr 官网地址】 npm install vue-qr --save // or yarn add vue-qr --save2. 组件使用 <template><vue-qr :logo-src"logoSrc":size"237":margin&qu…

03-详细介绍Stream及其常用API

Stream API Stream API(java.util.stream)把真正的函数式编程风格引入到Java中,可以极大地提高程序员生产力&#xff0c;让程序员写出高效、简洁的代码 实际开发中项目中多数数据源都是来自MySQL、Oracle等关系型数据库,还有部分来自MongDB、Redis等非关系型数据库 从关系型…

Exception in thread “消费者“ java.lang.IllegalMonitorStateException

这两天学习生产者消费者模型的时候&#xff0c;使用Java线程来实现&#xff0c;出现了一个问题“Exception in thread "消费者" java.lang.IllegalMonitorStateException”&#xff0c;并且&#xff0c;线程不结束。报错图片如下&#xff1a; 那我们怎么解决呢&…

Selenium(12):层级定位_通过父元素找到子元素

层级定位 在实际的项目测试中&#xff0c;经常会遇到无法直接定位到需要选取的元素&#xff0c;但是其父元素比较容易定位&#xff0c;通过定位父元素再遍历其子元素选择需要的目标元素&#xff0c;或者需要定位某个元素下所有的子元素。 层级定位的思想是先定位父对象&#xf…

二叉树题目:具有所有最深结点的最小子树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;具有所有最深结点的最小子树 出处&#xff1a;865. 具有所有最深结点的最小子树 难度 5 级 题目描述 要求 给定…

【史上最细教程】一台服务器上搭建2个MySQL实例

史上最细教程-一台服务器上搭建2个MySQL实例 文章目录 史上最细教程-一台服务器上搭建2个MySQL实例环境准备&#xff1a;操作步骤&#xff1a;1.安装MySQL2.配置搭建3306、3307实例3.初始化3306、3307实例、远程连接访问支持 推荐文章&#xff1a; 环境准备&#xff1a; 服务器…

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信&#xff0c;表示自己已经过了8月份的PMP考试&#xff0c;开始着手往项目管理岗位转型&#xff0c;但是对于项目管理岗位的面试却一筹莫展。放轻松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番给大家总结了一些项目经理在面试的时…

护法革命:CIMIVO+SOTUY洗前发膜让发丝重获“芯”生

爱美之心人皆有之,经常烫染或者是在太阳下暴晒,都会对发丝造成一定的伤害,一旦发丝受损,就会导致发芯内部角蛋白流失、化学键连接断裂,进而出现各种发质问题。为此,日本知名化妆品集团NABOCUL旗下发芯修护引领品牌ENNEO创新研发两大核心成分:CIMIVO、SOTUY,能够从根源修护发芯内…

CLion安装与配置教程

目录 一、下载并安装CLion1、下载1、官网&#xff1a;2、注意&#xff1a; 2、安装1、下载完成后&#xff0c;直接点击安装包安装&#xff0c;即可。2、开始安装&#xff0c;然后下一步3、可以在此处自定义地址&#xff0c;然后下一步4、根据系统版本选择&#xff0c;然后下一步…

C#开发的OpenRA游戏之属性Selectable(9)

C#开发的OpenRA游戏之属性Selectable(9) 在游戏里,一个物品是否具有选中的能力,是通过添加属性Selectable来实现的。当一个物品不能被用户选取,那么就不要添加这个属性。 这个属性定义在下面这段描述里: ^Selectable: Selectable: SelectionDecorations: WithSpriteCon…

网络安全入门教程(非常详细)从零基础入门到精通

网络安全是一个庞大而不断发展的领域&#xff0c;它包含多个专业领域&#xff0c;如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具&#xff0c;逐步深入&#xff0c;帮助您成为一名合格的网络安全从业人员。 一、网络安全基础知识 1.计算机基础知识 了解…

[点云分割] Clustering of Pointclouds into Supervoxels

介绍 “Clustering of Pointclouds into Supervoxels” 是一种点云数据聚类的方法&#xff0c;用于将点云数据分割成具有相似特征的超体素&#xff08;supervoxel&#xff09;。 超体素是一种在点云数据中表示连续区域的方法&#xff0c;类似于像素在图像中表示连续区域。超体…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的&#xff0c;但最近有个项目没得后端。所以研究下前端导出。 ps&#xff1a; 前端还可以导出 pdf&#xff0c;但是其分页问题需要话精力去计算才可能实现&#xff0c;并且都不是很完善。可参考之前的文章&#xff1a;利用 h…

Peter算法小课堂—前缀和数组的应用

桶 相当于计数排序&#xff0c;看一个视频 桶排序 太戈编程1620题 算法解析 #include <bits/stdc.h> using namespace std; const int R11; int cnt[R];//cnt[t]代表第t天新增几人 int s[R];//s[]数组是cnt[]数组的前缀和数组 int n,t; int main(){cin>>n;for(…