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

❣博主主页: 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(下)

Spring BootJava EE的一个轻量级框架,它简化了创建基于Spring的应用程序的过程。Spring Boot的核心理念是“约定优于配置”,通过提供一组默认设置和自动配置,使得开发者能够快速启动并运行一个功能完备的Spring应用,而无需手动配置大量的XML或YAML文件。 Spring Boot主要包括以下几个部分: 1. **依赖注入**(Dependency Injection, DI):Spring Boot使用Inversion of Control(IoC)容器管理对象之间的依赖关系,使得代码更加模块化和易于测试。 2. **起步依赖**(starter dependencies):Spring Boot提供了许多预打包的依赖起始点,如Web、Data JPA、Security等,帮助开发者快速集成常用功能。 3. **自动配置**:Spring Boot自动配置了许多常见的配置,如数据库连接池、日志处理、RESTful Web服务等,减少了手动配置的工作量。 4. **命令行工具**(Spring Initializr):Spring Initializr是一个在线工具,帮助开发者快速创建新项目及其所需的依赖。 5. **Actuator**:这是一个监控模块,提供了健康检查、信息收集和操作等功能,方便开发者进行应用管理和故障排查。 关于Java EE前端框架,通常指的是那些用于构建企业级Web应用程序的前端技术栈,例如: - **MVC(Model-View-Controller)架构**:Spring MVC是Spring框架的一部分,它定义了如何分离应用程序的表示层、业务逻辑和数据访问。 - **HTML、CSS和JavaScript**:前端开发的基础,通过现代框架如React、Angular或Vue.js构建用户界面。 - **JSP/Servlet**:Java EE中的标准页面技术,但Spring Boot鼓励使用Thymeleaf、Freemarker等模板引擎替代。 - **Ajax异步通信**:用于实现无刷新的前端与后端交互。 相关问题-- 1. Spring BootJava EE的区别是什么? 2. 在Spring Boot中,如何使用MVC模式? 3. Java EE前端框架通常包括哪些技术?
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值