Java自学之springboot:使用idea入门springboot
学习目的:在idea上新建一个springboot项目,了解springboot如何工作。
图原地址:https://www.processon.com/view/link/59812124e4b0de2518b32b6e
Part 1
在新建项目的页面选择Spring Intitalizr,点击next
修改以下两项,继续点击next
左边选择web,中间选择spring web,点击next
点击finish
点击右下角弹出来的import changes,以后每次修改完pom.xml,都需要重新import changes。
下面是新建的工程的目录结构
Part 2
新建一个cn.vaefun.springboot1.web包,并新建一个HelloSpringBoot的类。
@RestController注解是spring4的新注解,是@ResponseBody和@Controller的缩写。这个类是springboot的一个普通控制器。
package cn.vaefun.springboot1.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloSpringBoot {
@RequestMapping("/hello")
public String hello(){
return "hello springboot";
}
}
Part 3
运行自动生成的主类,看到springboot项目已经启动
在浏览器访问http://localhost:8080/hello,浏览器显示控制器中return的信息
Part 4
打包成jar
终端进入项目的路径:
cd /Users/liweikang/IdeaProjects/springboot1
运行打包命令:mvn install,稍等一会打包成功。
在target目录下生成了一个springboot1-0.0.1-SNAPSHOT.jar
运行该jar:java -jar target/springboot1-0.0.1-SNAPSHOT.jar
在浏览器访问http://localhost:8080/hello,可以访问到return的内容。
Part 5
打包成war包
修改主类:新加@ServletComponentScan注解,并且继承SpringBootServletInitializer
修改pom.xml
打包成war的声明:<packaging>war</packaging>
因为war包要放在Tomcat的webapps中,所以spring-boot-starter-tomcat修改为 provided方式,以避免和独立 tomcat 容器的冲突。表示provided 只在编译和测试的时候使用,打包的时候就没它了。
打包命令:mvn clean package。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.vaefun</groupId>
<artifactId>springboot1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot1</name>
<packaging>war</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Part 6
整合JSP
修改src/main/resources/application.properties配置文件,用于视图重定向到jsp文件。
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
在src/main中新建文件夹webapp/WEB-INF/jsp(注意下面的操作)。
打开项目设置的Modules,新建一个web(如果没有的话),在web resource directories中点击+号,路径选择刚才新建的webapp。
最后create artifact。
修改控制器,注意这次的注解只是Controller,return的hello是要去找hello.jsp。
package cn.vaefun.springboot.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.text.DateFormat;
import java.util.Date;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("now", DateFormat.getDateTimeInstance().format(new Date())+"测试热部署用的");
return "hello";
}
}
在jsp文件夹中新建hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Hi JSP. 现在时间是 ${now}
pom.xml需要新增对JSP的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.vaefun</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--热部署 当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机中。
这样就不需要重新启动也能看到修改后的效果了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
启动项目
Part 7
热部署
在Part 6中的pom.xml中已经增加了热部署的依赖和插件,热部署就是当你做了一些修改之后,不需要手动重启项目,当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机中。 这样就不需要重新启动也能看到修改后的效果。
<!--热部署 当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机中。
这样就不需要重新启动也能看到修改后的效果了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
----------------------------------------------------------------------------------
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
如果做完这些测试没有生效的话,可以参考Windows下面继续的一些设置:
实测会有大概10秒左右的延迟。
Part 8
修改端口和上下文路径
修改application的配置文件
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.port=8888
server.servlet.context-path=/test
此时就需要访问该路径:http://localhost:8888/test/hello
Part 9
yml配置文件
详细格式参考:SpringBoot系列教材 (十)- 基础 - springboot中用yml方式进行配置
自己遇到的一些问题:
新建的项目,如果pom.xml文件报红:右键项目-maven-reimport
浏览器访问的时候遇到白页错误(Whitelabel Error Page):仔细检查路径是否正确,确认Modules中的web路径设置是否正确。
热部署不生效,确认一下插件是否fork为true,启动插件,然后进行相关设置。

浙公网安备 33010602011771号