【JavaEE 进阶(一)】SpringBoot(上)

avatar
作者
猴君
阅读量:2

❣博主主页: 33的博客
▶️文章专栏分类:JavaEE◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多进阶知识

在这里插入图片描述

目录

1.前言

如今,网站开发是非常留下的技术,接下来我们就对网站开发进行深入学习,Spring官⽅提供了很多开源的项⽬,覆盖范围从Web开发到⼤数据,Spring发展到了今天,已经形成了⾃⼰的⽣态圈.我们在开发时,也倾向于使⽤Spring官⽅提供的技术,来解决对应的问题而Spring Boot是一个构建基于Spring框架的应用程序的工具,它可以简化Spring应用程序的开发和部署过程。Spring Boot利用自动配置和快速启动特性,使得开发者可以快速地创建独立的、生产级别的Spring应用程序,所以我们现在主要基于Spring boot框架来进行开发。

2.Spring

在学习SpringBoot前,我们先认识以下Spring,Spring让每个人编写Java程序更快、更简单、更安全。Spring专注于速度、简约和生产力,使其成为全球最受欢迎的Java框架-这是Spring官方的描述:
在这里插入图片描述
上述谈到了一个词,JAVA框架,那么什么是java框架呢?通俗的讲框架是实现某些功能的半成品,它提供了一些常用的工具类,我们在框架的基础上,可以更高效的进行开发。
Spring官方提供了很多开源的项目覆盖范围从web到大数据,Spring发展到如今已经形成了自己的生态圈,我们在开发时也更倾向于spring官方提供的技术来进行开发。
在这里插入图片描述
这些都是基于Spring Framework开发的,但它存在的配置很多,入门难,Spring也意识到了这个问题,所以为了简化开发者的使用推出了SpringBoot。简单来说SpringBoot的诞生就是为了简化Spring 程序开发的。

3.第一个SpringBoot程序

目前我的IDEAL专业版还在申请中,暂时用社区版和大家演示:
创建SpringBoot可以在官网创建:https://start.spring.io/
当我们创建号一个SpringBoot项目以后,可能会遇到一个常见的问题,就是端口号被占用
在这里插入图片描述
那么我们如何解决呢?
方法一
打开cmd查找哪个程序在使用8080端口,再根据PID在任务管理器中关闭,也可以直接在cmd中输入指令直接关闭,但是我总是关闭失败,所以我一般在任务管理器中关。
cmd命令:

netstat -ano|findstr 8080//查找哪个进程在使用8080端口 taskkill /pid PID号 -f 

方法二:修改该进程的端口号
在这里插入图片描述
接下来我们就可以写第一个hello Spring了!!!

@RestController public class HelloController {     @RequestMapping("/hello")     public String hello(){        return "hello,my dear Spring";     } } 

tomcat 是一个web服务器,默认端口为8080
在这里插入图片描述
在这里插入图片描述

4.Spring MVC

Spring MVC是Spring Boot中的常用模块,用于构建web应用程序,用Spring Boot创建Web应用程序时,通常会使用Spring MVC来处理HTTP请求和响应。

4.1建立连接

在Spring MVC中使用@RequestMapping来实现浏览器连接程序的作用,它是用来注册接口路由映射的,表示当服务器收到请求时,路径为/hello的请求就会调用hello这个方法的代码。
那么既然@RequestMapping已经建立了连接,我们为什么要使用@RestController,其实在一个项目中,往往会有多个类,那么当我们调用某一个方法时,它怎么知道我们调用的是哪一个类中的方法呢?如果类加了注解@RestController,spring才回去看方法中加了@RequestMapping注解的,当然它的作用并不只是这点,后面再介绍。

4.1.1@RequestMapping使用

@RequestMapping既可以修饰类也可以修饰方法,当修饰类和方法的时候访问路径是:类路径+方法路径
在这里插入图片描述
@RequestMapping既支持post请求也支持get请求

4.2请求

4.2.1传递单个参数

@RestController @RequestMapping("/d1") public class HelloController {     @RequestMapping("/hello")     public String hello(Integer age){        return "age: "+age;     } } 

在这里插入图片描述
url中查询字符串的参数要和我们所定义的方法的参数相同。

4.2.2传递多个参数

@RestController @RequestMapping("/d1") public class HelloController {     @RequestMapping("/hello")     public String hello(int age,String name){        return "age: "+age+"name: "+name;     } }  

在这里插入图片描述
如果我们又有多个参数的话,那么每次都会去对方法进行修改,那么有什么方法不用反复求修改吗?那就是传递对象。

4.2.3传递一个对象

先建立一个类:

package com.example.demo; public class Student {     private Integer age;     private String name;     private String like;     public Integer getAge() {         return age;     }     public void setAge(Integer age) {         this.age = age;     }     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public String getLike() {         return like;     }     public void setLike(String like) {         this.like = like;     }     @Override     public String toString() {         return "Student{" +                 "age=" + age +                 ", name='" + name + '\'' +                 ", like='" + like + '\'' +                 '}';     } } 
 @RequestMapping("/r3")     public Student r3(Student student){         return student;     } 

在这里插入图片描述

4.2.4参数重命名

 @RequestMapping("/r4")//重命名 like,并设置参数非必传     public String r4(@RequestParam(value="like",required=false) String LIKE){         return "爱好:"+LIKE;     } 

在这里插入图片描述

4.2.5数组传参

@RequestMapping("/R3")     public String R3(String[] array){         return "接到参数, array:"+ Arrays.toString(array);     } 

在这里插入图片描述

4.2.6接收集合

 @RequestMapping("/R4")     public String R4(@RequestParam(required = false) List<String> list){         return "接到参数, list:"+ list;     } 

在这里插入图片描述

4.2.7接收json

@RequestMapping("/R5")     public String r8(@RequestBody Student student){         return "接到参数, student:"+ student.toString();     } 

在这里插入图片描述

4.2.8从路径中获取参数

 @RequestMapping("/r9/{name}/{age}/")     public String r12(@PathVariable("name") String name, @PathVariable("age") String age){         return "name:"+articleId+",age"+name;     } 

在这里插入图片描述

4.2.9上传文件

@RequestMapping("/r2")     public String R2(@RequestPart("file") MultipartFile file){         String name=file.getOriginalFilename();         return "上传成功"+name;     } 

在这里插入图片描述

4.3Cookie与Session

Session:会话的意思,会话是⼀个客⼾与服务器之间的不中断的请求响应.对客⼾的每个请求,服务器能够识别出请求来⾃于同⼀个客⼾.当⼀个未知的客⼾向Web应⽤程序发送第⼀个请求时就开始了⼀个会话.当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了。Session的本质就是⼀个"哈希表",存储了⼀些键值对结构.Key就是SessionID,Value就是用户信息(信息可以根据需求灵活设计).

Cookie:是一种在客户端(通常是浏览器)和服务器之间交换信息的机制。当用户访问网站时,服务器会在用户的计算机上存储一个小型文本文件,其中包含有关用户的信息,登录状态、登陆时间等。
Http本身是一个无状态的协议,但是在实际开发中,我们很多时候就需要知道请求之间的联系,例如之前有没有登陆某个界面,这个时候就可以通过cookie来记录,当用户登录的时候,服务器在Session中会新增一个记录,并把SessionID返回给客户端(通过http中的set-cookie字段返回);客户端后续再向服务器发送请求时会携带SessionID(通过cookie字段携带);服务器收到请求后会根据SessionID获取到用户的对应信息,再进行后续操作,如果找不到SessionID就重新创造一个Session并把SessionID返回给客户端。
上述的Seeion。

Cookie与Session区别

Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制
Cookie和Session之间主要是通过SessionId关联起来的,SessionIdCookie和Session之间的桥梁
Cookie和Session经常会在⼀起配合使⽤.但是不是必须配合 ,完全可以⽤Cookie来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是SessionId
Session中的sessionId也不需要⾮得通过Cookie/Set-Cookie传递,⽐如通过URL传递

4.3.1获取Cookie

 @RequestMapping("/getCookie")     public String getCookie2(@CookieValue("NAME") String name{         return "从Cookie中获取值, NAME:"+name;     } 

在这里插入图片描述

4.3.2获取Session

@RequestMapping("/r3")     public String getS(HttpSession session){         session.setAttribute("name","张三");         String name = (String) session.getAttribute("name");         return "session获取成功"+name;     } 

在这里插入图片描述

4.3.3获取header

public String getHeader2(@RequestHeader("User-Agent") String userAgent){ //        String userAgent = request.getHeader("User-Agent");         return "从header中获取信息, userAgent:"+userAgent;     } 

5.总结

本篇文章主要介绍了第一个SpringBoot程序,与客户端建立连接,@RequestMapping使用,关于请求传参如传递单个参数,传递多个参数,传递一个对象,参数重命名等等,以及Cookie与Session的介绍,在下篇文章中,博主讲继续介绍响应部分,并和大家分析几个小项目。

下期预告:SpringBoot(下)

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!