Java自学之springboot:使用idea入门springboot

学习目的:在idea上新建一个springboot项目,了解springboot如何工作。

v2-a2eaf07fa620bf1d251ac9b63efe2734_b.jpg

图原地址:processon.com/view/link

Part 1

在新建项目的页面选择Spring Intitalizr,点击next

v2-d73a716bc2c15251592fb43b13d2b89a_b.jpg

修改以下两项,继续点击next

v2-ecc89837b345bfd8e137204e62a7701c_b.jpg

左边选择web,中间选择spring web,点击next

v2-e50e7ac94bbfcab621f401ab2d316c26_b.jpg

点击finish

v2-841e4120100b67e8249edbebb8040b1e_b.jpg

点击右下角弹出来的import changes,以后每次修改完pom.xml,都需要重新import changes。

v2-d5f9e259539bd2783f2ee2852b13e2ad_b.jpg

下面是新建的工程的目录结构

v2-322857b95253f5a2e99953c84b79285a_b.jpg

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项目已经启动

v2-06409b57743d1a52018a5dfb889815a5_b.jpg

在浏览器访问localhost:8080/hello,浏览器显示控制器中return的信息

v2-14e6e5684576a979b19db0145fe2250f_b.jpg

Part 4

打包成jar

终端进入项目的路径:

cd /Users/liweikang/IdeaProjects/springboot1

运行打包命令:mvn install,稍等一会打包成功。

v2-5175dd66363388b51addb55bc9ccee0c_b.jpg

在target目录下生成了一个springboot1-0.0.1-SNAPSHOT.jar

运行该jar:java -jar target/springboot1-0.0.1-SNAPSHOT.jar

v2-0d60a3942b05c95ca0dc0a646bc8fe6b_b.jpg

在浏览器访问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。

v2-93718772e1e18f3bf6655c0409b13d70_b.jpg

最后create artifact。

v2-ad6f45933f06ea85777b477e672e29df_b.jpg

修改控制器,注意这次的注解只是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>

启动项目

v2-54daa6e05432abe4e13c324bfb37454e_b.jpg

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下面继续的一些设置:

v2-e62228988f801ef87f184e3ae8e2b380_b.png

实测会有大概10秒左右的延迟。

Part 8

修改端口和上下文路径

修改application的配置文件

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.port=8888
server.servlet.context-path=/test

此时就需要访问该路径:localhost:8888/test/hel

v2-e6b2daa8b2ffa96a0ac257dccbdda43b_b.jpg

Part 9

yml配置文件

v2-7cb3d6c3a8acb606ef2892c3dad2171f_b.jpg

详细格式参考:SpringBoot系列教材 (十)- 基础 - springboot中用yml方式进行配置


自己遇到的一些问题:

新建的项目,如果pom.xml文件报红:右键项目-maven-reimport

浏览器访问的时候遇到白页错误(Whitelabel Error Page):仔细检查路径是否正确,确认Modules中的web路径设置是否正确。

热部署不生效,确认一下插件是否fork为true,启动插件,然后进行相关设置。

posted @ 2020-03-10 11:41  IMKKA  阅读(8)  评论(0)    收藏  举报  来源