【代码审计】JAVAWeb基础SpringBoot&SpringCloud

0x00 版权声明

JAVA基础系列是笔者学习@炼石星球的笔记,大部分文字描述取自星球内发布的教程文件,仅作学习。

0x01 SpringBoot/Cloud简介

SpringBoot是一款基于JAVA的开源框架。目的是为了简化Spring应用搭建和开发流程。是目前比较流行,大中小型企业常用的框架。正因为极大简化了开发流程,才收到绝大开发人员的喜爱。SpringBoot核心原理是自动装配(自动配置)。在这之前,开发一个JavaWeb,Spring等项目要进行很多配置,使用了SpringBoot就不 用在过多考虑这些方面。并且在SpringBoot中还内置了Tomcat

Spring Cloud是一系列框架的有序集合。 它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

0x02 Spring Boot之HelloWorld

第一步,创建Spring项目

选择Spring Initializer,右侧保持默认,packing选择war方式:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202210091120971.png

如果出现

Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings.

Error message: Cannot download ‘https://start.spring.io‘: Read timed out

错误,使用以下方法

打开idea最上角file选项的Settings,

搜索HTTP Proxy,勾选Automatic proxy configuration URL: 输入https://start.spring.io,接着点击Auto-detect proxy settings 输入https://start.spring.io ,点击ok 然后点击下方的Check Connection,如果仍然无法连接,将https更改为http,最后成功会提示Success:

如果仍然无法连接,把地址改为阿里云https://start.aliyun.com/,创建项目地址也改为https://start.aliyun.com/

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202210091131848.png

然后重新创建项目,选择Web,勾选Spring Web,点击完成,等待自动创建:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202210091140579.png

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202210091142787.png

第二步,创建package

创建com.example.demo.controller包,在controller目录下新建HelloController.class文件,键入代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "Hello World! by zebra";
}
}

第三步,运行项目

点击运行,启动项目,浏览器访问http://127.0.0.1:8080/hello,看到页面输出:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202210091342422.png

0x03 注解含义

@Controller 注解:标注该类为controller类,可以处理http请求。@Controller一般要配合模版来使用。现在项目大多是前后端分离,后端处理请求,然后返回JSON格式数据即可,这样也就不需要模板了。

@ResponseBody 注解:将该注解写在类的外面,表示这个类所有方法的返回的数据 直接给浏览器。 @RestController 相当于 @ResponseBody 加上 @Controller @RequestMapping 注解:配置 URL映射 ,可以作用于某个Controller类上,也可以作用于某Controller类下的具体方法中,说白了就是URL中请求路径会直接映射到具体方法中执行代码逻辑。

@RequestParam 注解:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解),常用于POST请求处理表单

@PathVariable 注解:接受请求URL路径中占位符的值,示例代码如下:

1
2
3
4
5
6
7
8
9
10
@Controller
@ResponseBody
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/whoami/{name}/{sex}")
public String hello(@PathVariable("name") String name,
@PathVariable("sex") String sex){
return "Hello" + name + sex;
}
}