Java笔记-14、Web后端基础 SpringBoot入门
- 静态资源:服务器上存储的不会改变的数据,通常不会根据用户的请求而变化。比如:HTML、CSS、JS、图片、视频等(负责页面展示)。
- 动态资源:服务器端根据用户请求和其他数据动态生成的,内容可能会在每次请求时都发生变化。比如:Servlet、JSP、Spring等(负责逻辑处理)。部署在Web服务器(Tomcat)上才能正常运行。
- B/S架构:Browser/Server,浏览器/服务器架构模式。客户端只需浏览器,应用程序的逻辑和数据都存在服务器端。(维护方便)
SpringBoot项目创建
- 创建新模块,选择springboot,填写信息。
- 添加Web依赖,创建生成项目。
- 新创建的项目中有一个类,叫做
XXXApplication
,这个类有注解@SpringBootApplication
,意味着这个类是启动类/引导类,用于启动当前项目。 - 新创建的项目结构是标准的Maven目录结构。在main-resource中有两个文件夹和一个文件。两个文件夹一个是static,用于存放静态页面;templates用于存放模板文件。还有一个核心文件,叫做
application.properties
,用于配置项目。
创建一个请求处理类-快速入门
- 在包下创建一个
HelloController
类。 - 给这个类添加注解
@RestController
,标明这个类是一个请求处理类。 - 定义一个方法,添加注解
@RequestMapping("/hello")
。这个方法用于接收前端发来的请求,请求路径为"/hello"
。 - 找到启动类进行Debug。控制台输出显示监听的端口为本地8080端口。
- 访问8080端口并携带数据,
http://127.0.0.1:8080/hello?name=subeipo
。 - 查看请求处理结果。
@RestController public class HelloController { @RequestMapping("/hello") public String hello(String name){ System.out.println("HelloController.hello"); return "Hello " + name + " ~"; } }
Spring官方脚手架连不上: Server URL改成
start.aliyun.com
。
离线创建SpringBoot项目
使用Spring Initializr的离线支持
- 下载依赖:
首先,下载Spring Boot的依赖。从Spring Initializr网站下载所需的依赖。访问该网站,选择项目设置(如Spring Boot版本、项目类型等),然后点击“Generate”按钮。生成一个包含所有依赖的ZIP文件。 - 解压并使用:
下载并解压ZIP文件,得到一个包含所有必需依赖的lib目录和pom.xml(对于Maven项目)或build.gradle(对于Gradle项目)文件。 - 使用IDE:
如果使用的是IDE(如IntelliJ IDEA或Eclipse),可以直接导入这个项目。对于Maven项目,选择“Import Project”并选择pom.xml文件;对于Gradle项目,选择“Import Project”并选择build.gradle文件。
手动创建项目
- 创建项目:在idea中创建一个maven项目,正常填写项目的坐标信息。
- 在
pom.xml
中指定springboot的父工程。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.4</version> <relativePath/> <!-- lookup parent from repository --> </parent>
- 添加springboot项目的起步依赖以及maven插件。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.27</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
- 手动创建项目目录结构,通常包括
src/main/java
和src/main/resources
目录。还有对应的test目录。 - 创建启动类 SpringBootDemoApplication
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringbootWebQuickstartApplication { public static void main(String[] args) { SpringApplication.run(SpringbootWebQuickstartApplication.class, args); } }
- 在resources目录创建一个新的file文件,命名为
application.properties
。
项目引入了Spring Web依赖,即上述第3点的starter依赖。包含了web应用开发和单元测试所需要的常见依赖。
补充
- 请求数据的构成一般为请求行、请求头、请求体。GET一般乌请求体,POST有请求体。
- 请求行指定了请求的方法、请求的路径以及HTTP版本。
- Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并封装到了
HttpServletRequest
类的对象里,在调用Controller方法的时候将这个对象传递给了该方法。程序员不必直接对协议进行操作,让Web开发更加便捷。 - 相应数据的构成也分为三个部分,响应行、响应头和响应体。
- 响应行指定了协议、状态码和对应描述。
- 状态码大致分为五类。
- 1XX:响应中-临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果它已经完成则忽略它。
- 2XX:成功-表示请求已经被成功接收,处理已完成。
- 3XX:重定向-重定向到其他地方;让客户端再发起一次请求以完成整个处理。
- 4XX:客户端错误-处理发生错误,责任在客户端。如:请求了不存在的资源(404)、客户端未被授权、禁止访问等。
- 5XX:服务器错误-处理发生错误,责任在服务端。如:程序抛出异常(500)等。
- Web服务器对HTTP协议的响应数据封装成
HttpServletResponse
类的对象,并在调用Controller方法的时候将对象传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。 - 注解
@ResponseBody
将controller返回值直接作为响应体的数据响应;返回值是对象/集合,自动转为json。注解RestController
封装了@ResponseBody
。
// 一个读取文件数据并解析成JSON的例子 import cn.hutool.core.io.IoUtil; import com.study.webproject01.pojo.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @RestController public class UserController { @RequestMapping("/list") public List<User> list() throws Exception { //1.加载并读取user.txt文件,获取用户 InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt"); ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>()); //2.解析用户信息,封装User对象到List集合中 List<User> userList = lines.stream().map(line -> { String[] parts = line.split(","); Integer id = Integer.parseInt(parts[0]); String username = parts[1]; String password = parts[2]; String name = parts[3]; Integer age = Integer.parseInt(parts[4]); LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); return new User(id, username, password, name, age, updateTime); }).collect(Collectors.toList()); //3.将List集合转换为JSON格式的字符串,并返回 return userList; } }
上述代码只是个例子,没有分层解耦合,不推荐这样写。分层解耦见下一个笔记。
本文作者:subeipo
本文链接:https://www.cnblogs.com/subeipo/p/18712332/java-bi-ji14web-hou-duan-ji-chu-springboot-ru-men
版权声明:本作品采用署名—非商业性使用—相同方式共享 4.0 协议许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步