用SpringBoot开发java程序笔记

简介: 用SpringBoot开发一个简单的java程序,让你轻松体验Java应用开发完整过程

SpringBoot快速上手

  • New Project
  • Spring Initializr 注意社区版 Intellij IDE 没有这项,需要额外安装插件
  • Project SDK: 1.8
  • Spring Initializr Project Settings:Group 组织一般公司域名倒写,Artifact 项目名,Maven,Java,Jar,Java version: 8
  • Web,Spring Web

JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的新旧命名方式问题,所以我们口中常说的Java8、JDK8、JDK1.8其实是同一个东西。

运行报错:

  • Error:Cannot determine path to 'tools.jar' library for openjdk-19
  • Error:java: 错误: 不支持发行版本 17

上面这两个报错一般是 JDK 或编辑器版本不对,可以直接用最新的的社区版 Intellij IDE

端口被占用

# 【mac】
# 查看被占用的端口号,8080 就是要查看的端口
sudo lsof -i tcp:8080

# 杀死进程,PID 是对应进程的 PID
sudo kill -9 PID

# 【windows】
# 查看端口8080被哪个进程占用
netstat -ano | findstr "8080"    

# 杀死进程
kill -9 PID

项目热部署

类似前端的自动热更新和运行 node 项目的 nodemon,需要借助 spring-boot-devtools

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

添加到 pom.xml 文件中,类似前端里的 package.json,用来管理项目依赖。

添加好后还须在 src/main/resources/application.properties 文件里配置一下让它生效。

IDE 中还须额外配置:

  • Settings页面(社区版的设置没在File菜单下,在右上角的设置小图标里),Build,Execution,Deployment => compile => Build project automatically
  • Maintenance页面:windows 上 ctrl+alt+shift+/(mac 上连续按两次shift键),打开选择框,输入reg,选择 Registry..., 勾选上 compiler.automake.allow.when.app.running。坑:最新版的 Registry 里已经没有那项了,在设置里的 Advanced Settings 里:Allow auto-make to start even if developed application is currently running。

SpringBoot Controller

控制器 controller:

  • @Controller,返回页面,通常与模版引擎一起使用
  • @RestController,返回json数据,前后端分离

MVC模式:

  • Model:模型,存储数据
  • Controller:控制器,协调控制
  • View:视图,显示数据

大白话理解:Model => 数据库,View => 前端,Controller => 后端

常用请求注解:

  • @RequestMapping
  • @GetMapping
  • @PostMapping

SpringBoot文件上传+拦截器

静态资源放到 src/main/resources/static 目录下,就能直接访问,和前端里的 public 目录类似。

如果要修改,在 application.properties 中定义过滤规则和静态资源位置

spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/static/

Spring Boot工程嵌入的 tomcat 限制了每个文件最大为1M,单次请求的文件的总数不能大于10M,如果要修改配置,在 application.properties 中:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB

前端用 input 表单或 postman 模拟 multipart/form-data 上传文件,注意文件的名字要跟接口里定义的 MultipartFile 的参数名一致,下面代码用的 file,再通过 transferTo 方法可将文件写入到磁盘中,类似 nodejs 中的 fs.writeFile。

@RestController
public class FillController {
   
    // 上传文件目录
    private static final String UPLOAD_FOLDER = System.getProperty("user.dir") + "/upload/";

    // 上传文件
    @PostMapping("upload")
    public String upload(String nickname, MultipartFile file) throws IOException {
   
        System.out.println("文件大小:" + file.getSize());
        System.out.println(file.getContentType());
        System.out.println(file.getOriginalFilename());
        saveFile(file);
        return "上传文件成功";
    }

    public void saveFile(MultipartFile file) throws IOException {
   
        System.out.println("项目目录:" + System.getProperty("user.dir"));
        System.out.println("文件上传目录:" + UPLOAD_FOLDER);

        File upDir = new File(UPLOAD_FOLDER);
        // 目录不存在就新建一个
        if (!upDir.exists()) {
   
            upDir.mkdir();
        }

        File f = new File(UPLOAD_FOLDER + file.getOriginalFilename());
        // 通过transferTo方法写入文件,类似 node 里的 fs.writeFile
        file.transferTo(f);
    }
}

文件保存目录也可以用 HttpServletRequest 对象的 getServletContext().getRealPath("/upload/") 去创建,此目录是服务器上的路径,每次重启服务器会发生变化,直接将此路径复制到浏览器中是可以直接打开的。通过此路径在额外配置下静态目录,这样就可以直接通过项目访问到上传的文件。

也可以通过 ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/" 直接将文件存入 static 目录中。

目录
相关文章
|
26天前
|
存储 Java 开发者
【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
本文详细介绍了 Java 中 `toString()` 方法的重写技巧及其重要
48 10
【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
|
19天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
41 6
|
22天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
53 6
|
23天前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
42 6
|
26天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
38 5
|
26天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
28 4
|
机器学习/深度学习 Java 程序员
SpringBoot开发秘籍 - 利用 AOP 记录日志
Aspect Oriented Programming 面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。
183 0
SpringBoot开发秘籍 - 利用 AOP 记录日志
|
22天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
59 10
|
22天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
43 8