GVKun编程网logo

打包一个包含JSP和静态资源的Spring Boot应用程序(springboot打包后加载静态资源问题)

8

本篇文章给大家谈谈打包一个包含JSP和静态资源的SpringBoot应用程序,以及springboot打包后加载静态资源问题的知识点,同时本文还将给你拓展IDEASpringboot视图解析二器和静态

本篇文章给大家谈谈打包一个包含JSP和静态资源的Spring Boot应用程序,以及springboot打包后加载静态资源问题的知识点,同时本文还将给你拓展IDEA Springboot 视图解析二器和静态资源的一些问题、IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)、Spring Boot 2.x 里面访问静态资源的坑、Spring Boot 参考指南(开发你的第一个Spring Boot应用程序)等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

打包一个包含JSP和静态资源的Spring Boot应用程序(springboot打包后加载静态资源问题)

打包一个包含JSP和静态资源的Spring Boot应用程序(springboot打包后加载静态资源问题)

我想将spring-boot应用程序打包为jar,并使用打包mvn package

这将产生一个不包含任何/WEB-INF/jspnor 的jar /src/main/webapp/resources

我如何确保我的jar里装有所有需要的东西?

这是我目前的情况pom.xml

<modelVersion>4.0.0</modelVersion><parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-samples</artifactId>    <version>1.0.0.RC3</version></parent><packaging>jar</packaging><properties>    <main.basedir>${basedir}/../..</main.basedir>    <m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot></properties><dependencies>    <dependency>        <groupId>${project.groupId}</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>${project.groupId}</groupId>        <artifactId>spring-boot-starter-tomcat</artifactId>        <scope>provided</scope>    </dependency>    <dependency>        <groupId>org.apache.tomcat.embed</groupId>        <artifactId>tomcat-embed-jasper</artifactId>        <scope>provided</scope>    </dependency>    <dependency>        <groupId>javax.servlet</groupId>        <artifactId>jstl</artifactId>    </dependency>    <dependency>        <groupId>commons-dbcp</groupId>        <artifactId>commons-dbcp</artifactId>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-jdbc</artifactId>    </dependency>    <dependency>        <groupId>org.apache.tomcat</groupId>        <artifactId>tomcat-jdbc</artifactId>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-tx</artifactId>    </dependency>    <dependency>        <groupId>org.postgresql</groupId>        <artifactId>postgresql</artifactId>        <version>9.3-1101-jdbc41</version>    </dependency></dependencies><!-- Package as an executable JAR --><build>    <plugins>        <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>        </plugin>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-surefire-plugin</artifactId>            <configuration>                <useSystemClassLoader>false</useSystemClassLoader>            </configuration>        </plugin>    </plugins></build><!-- Allow access to Spring milestones and snapshots --><!-- (you don''t need this if you are using anything after 1.0.0.RELEASE) --><repositories>    <repository>        <id>spring-snapshots</id>        <url>http://repo.spring.io/snapshot</url>        <snapshots>            <enabled>true</enabled>        </snapshots>    </repository>    <repository>        <id>spring-milestones</id>        <url>http://repo.spring.io/milestone</url>        <snapshots>            <enabled>true</enabled>        </snapshots>    </repository></repositories><pluginRepositories>    <pluginRepository>        <id>spring-snapshots</id>        <url>http://repo.spring.io/snapshot</url>    </pluginRepository>    <pluginRepository>        <id>spring-milestones</id>        <url>http://repo.spring.io/milestone</url>    </pluginRepository></pluginRepositories><artifactId>com.example.app</artifactId>

答案1

小编典典

以下示例适用于Spring Boot 1.3.3.RELEASE: https://github.com/ghillert/spring-boot-
jsp-demo

关键是将静态jsp内容放入:

/src/main/resources/META-INF/resources/WEB-INF/jsp

并确保您在application.properties中定义视图前缀/后缀:

spring.mvc.view.prefix=/WEB-INF/jsp/spring.mvc.view.suffix=.jsp

IDEA Springboot 视图解析二器和静态资源的一些问题

IDEA Springboot 视图解析二器和静态资源的一些问题

1.首先认识一下resources目录下三个文件夹的作用。

public

 

相当于web-inf文件夹外的文件,外部通过主机加文件名的方式可以直接访问。

比如访问127.0.0.1:8080/mypublic.html

访问public目录下任何格式文件都可以,但是子目录中的不行。

static

 

目录名称为css,html,js下面后缀名为html,css,js的文件可以从浏览器直接访问。

比如访问http://127.0.0.1:8080/css/easyloader.js

http://127.0.0.1:8080/html/no.html  ,但是这些目录中的子目录文件不可外部直接访问。

static目录下的index.html文件可以直接访问。访问主机127.0.0.1会直接访问127.0.0.1/index.html

template

Thymeleaf转发会使用该目录下的html文件

通过Thymeleaf

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

Controller中

@Controller
public class HelloController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String say() {
        return "hello";
    }
}

这样返回“hello”就是forward内部templates中的hello.html。

 转发static下的html文件

如图,static目录下有goodie.html,unknown子目录下有leigon.html文件,HTML子目录下的go目录有no.html文件

现在通过controller来转发这些文件。

首先在application.yml中配置视图解析器,删除Thymeleaf库,重新build。

spring:
  mvc:
    view:
      prefix: /
      suffix: .html

 

 

会转发到对应的html

@GetMapping("/good")
    public String goo() {
        return "goodie";
    }

    @GetMapping("/legion")
    public String legion() {
        return "/unknown/legion";
    }

    @GetMapping("/no")
    public String no() {
        return "/html/go/no";
    }
View Code

 

IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)

IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)

这篇文章主要介绍了IDEA配置静态资源热加载操作(Springboot修改静态资源不重启),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

第一步:

修改file->settings->compiler->build project automatically

第二步:

按ctrl+shift+a,搜索Registry双击进去,点击面板搜索running,勾选下面的值:

代码的热加载可以使用spring-boot-devtools,百度下就有很多,个人感觉不好用,修改代码需要重启项目,很烦,非常鸡肋,所以我不用,哈哈哈…

补充知识:idea实现修改html等springboot下static目录静态资源重新加载

对于前后端不分离项目来说,需要修改完js或者HTML代码后及时看到修改后的结果,但是基于idea的spingboot开发必须重启后才能看到js修改后的效果,这根本没法用

最后解决办法如下:

org.springframework.bootspring-boot-devtoolstrueorg.springframework.bootspring-boot-maven-plugin

然后再填加个配置,在运行main方法类上编辑下:

这样每次改完文件切换到浏览器js文件就自动被重新装载了,凑合着可用了。

以上这篇IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小编。

Spring Boot 2.x 里面访问静态资源的坑

Spring Boot 2.x 里面访问静态资源的坑

在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源路径(classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/)不生效。

首先看一下 自动配置类的定义:

这是因为在 springboot的web自动配置类 WebMvcAutoConfiguration 上有条件注解 

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

这个注解的意思是在项目类路径中 缺少 WebMvcConfigurationSupport类型的bean时改自动配置类才会生效,所以继承 WebMvcConfigurationSupport 后需要自己再重写相应的方法。

如果想要使用自动配置生效,又要按自己的需要重写某些方法,比如增加 viewController ,则可以自己的配置类可以继承  WebMvcConfigurerAdapter 这个类。不过在spring5.0版本后这个类被丢弃了 WebMvcConfigurerAdapter  ,虽然还可以用,但是看起来不好。

/**
 * 原来是这么写的:
 * public class BeanConfiguration extends WebMvcConfigurationSupport
 * 导致默认配置的静态资源不生效了
 */
@Configuration
public class BeanConfiguration implements WebMvcConfigurer {

    @Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        mapper.setDefaultPropertyInclusion(JsonInclude.Include.ALWAYS);
        converter.setObjectMapper(mapper);
        return converter;
    }


    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //将我们定义的时间格式转换器添加到转换器列表中,
        //这样jackson格式化时候但凡遇到Date类型就会转换成我们定义的格式
        converters.add(jackson2HttpMessageConverter());

        // 添加字符串转换,否认如果返回字符串,则会报异常,其他converter 
        // 参考:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#addDefaultHttpMessageConverters
        StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
        stringHttpMessageConverter.setWriteAcceptCharset(false);  // see SPR-7316
        converters.add(stringHttpMessageConverter);
    }

}

 

Spring Boot 参考指南(开发你的第一个Spring Boot应用程序)

Spring Boot 参考指南(开发你的第一个Spring Boot应用程序)

11. 开发你的第一个Spring Boot应用程序

本节描述如何开发一个简单的“Hello World!” web应用程序来突出了Spring Boot的一些关键特性,我们使用Maven来构建这个项目,因为大多数IDE都支持它。

spring.io网站包含许多使用Spring Boot的“入门”指南,如果你需要解决一个具体的问题,先检查一下。
你可以通过使用start.spring.io和从依赖关系搜索器中选择“Web”启动器来快捷地完成以下步骤,这样做会生成一个新的项目结构,这样你就可以立即开始编写代码,查看Spring Initializr文档了解更多细节。

在开始之前,打开一个终端并运行以下命令,以确保安装了有效的Java和Maven版本:

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
此示例需要在其自己的文件夹中创建,随后的指令假设你已经创建了一个合适的文件夹,并且它是你当前的目录。

11.1 创建POM

我们需要先创建一个Maven pom.xml文件,pom.xml是用于构建项目的,打开你最喜欢的文本编辑器并添加以下内容:

<?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 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">    
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId> <artifactId>myproject</artifactId>   
  <version>0.0.1-SNAPSHOT</version>
  <parent> 
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>    
    <version>2.0.5.RELEASE</version>
  </parent>
  <!-- Additional lines to be added here... -->
</project>

前面的清单应该给你一个工作构建,你可以通过运行mvn package来测试它(现在,你可以忽略“jar will be empty - no content was marked for inclusion!”的警告)。

此时,你可以将项目导入到IDE中(大多数现代Java IDE都包含对Maven的内置支持),为了简单起见,我们继续使用这个示例的纯文本编辑器。

11.2 添加类路径依赖

Spring Boot提供了一些“Starters”,可以让你将jar添加到类路径中,我们的示例应用程序已经在POM的父部分使用了spring-boot-starter-parentspring-boot-starter-parent是一个特殊的starter,它提供有用的Maven默认值,它还提供了一个dependency-management部分,以便你可以“幸福”的省略依赖项的version标记。

其他“Starters”提供了在开发特定类型的应用程序时可能需要的依赖项,由于我们正在开发一个web应用程序,所以我们添加了一个spring-boot-starter-web依赖项。在此之前,我们可以通过运行以下命令查看当前所拥有的内容:

$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree命令以树的形式打印项目依赖项,你可以看到spring-boot-starter-parent本身不提供依赖性,要添加必要的依赖项,请编辑pom.xml并将spring-boot-starter-web依赖项立即添加到parent部分下面:

<dependencies>
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId> 
 </dependency>
</dependencies>

如果你再次运行mvn dependency:tree,你会看到现在有许多额外的依赖项,包括Tomcat web服务器和Spring Boot本身。

11.3 编写代码

要完成我们的应用程序,我们需要创建一个Java文件,默认情况下,Maven从src/main/java编译源代码,因此你需要创建该文件夹结构,然后添加一个名为src/main/java/Example.java的文件,包含以下代码:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*; 
import org.springframework.web.bind.annotation.*;

@RestController 
@EnableAutoConfiguration 
public class Example {
  @RequestMapping("/")
  String home() {
    return "Hello World!";
  }
  public static void main(String[] args) throws Exception {       
     SpringApplication.run(Example.class, args);
  }
}

虽然这里没有多少代码,但仍有很多工作要做,我们将在接下来的几节中讨论重要的部分。

11.3.1 @RestController和@RequestMapping注解

在我们的Example类上的第一个注解是@RestController,这被称为构造型注解,它为阅读代码的人们提供了一些提示,并且为Spring提供了一个特定的角色。在本例中,我们的类是一个web @Controller,所以Spring在处理传入web请求时考虑它。

@RequestMapping注解提供了“路由”信息,它告诉Spring,任何带有/路径的HTTP请求都应该映射到home方法,@RestController注解告诉Spring将生成的字符串直接呈现给调用者。

@RestController@RequestMapping注解是Spring MVC注解,(它们不是特定于Spring Boot的)有关更多详细信息,请参见Spring参考文档中的MVC部分。

11.3.2 @EnableAutoConfiguration注解

第二个类级别注解是@EnableAutoConfiguration,这个注解告诉Spring Boot基于你添加的jar依赖项“猜测”你想如何配置Spring,因为Spring-boot-starter-web添加了Tomcat和Spring MVC,所以自动配置假设你正在开发一个web应用程序,并相应地设置Spring。

Starters和自动配置

自动配置被设计成与“Starters”很好地工作,但是这两个概念并没有直接关联。你可以自由地挑选和选择除starters之外的jar依赖项,Spring Boot仍然尽力自动配置你的应用程序。

11.3.3 “Main”方法

我们的应用程序的最后一部分是main方法,这只是遵循应用程序入口点的Java约定的标准方法。我们的main方法通过调用run委托给Spring Boot的SpringApplication类,SpringApplication引导我们的应用程序启动Spring,而Spring又启动了自动配置的Tomcat web服务器。我们需要通过Example.class作为run方法的参数,以告诉SpringApplication它是主Spring组件,args数组也被传递,以公开任何命令行参数。

11.4 运行样例

此时,你的应用程序应该可以工作了,因为你使用了spring-boot-starter-parentPOM,所以你有一个有用的run目标,你可以使用它来启动应用程序。类型mvn spring-boot:run从根项目目录运行,以启动应用程序,你应该会看到类似如下的输出:

$ mvn spring-boot:run
  .   ____          _            __ _ _
 /\\ / ___''_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | ''_ | ''_| | ''_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  ''  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

如果你打开一个web浏览器到localhost:8080,你应该会看到以下输出:

Hello World!

要优雅地退出应用程序,按ctrl-c

11.5 创建一个可执行jar

我们通过创建一个可以在生产中运行的完全自包含的可执行jar文件来完成我们的示例,可执行jar(有时称为“fat jars”)是包含你的编译类的存档文件,以及你的代码需要运行的所有jar依赖项。

可执行jar和Java

Java没有提供加载嵌套jar文件的标准方法(jar文件本身包含在一个jar中)。
如果你希望分发一个自包含的应用程序,这可能会有问题。

为了解决这个问题,许多开发人员使用“uber”jar,一个uber jar将所有应用程序依赖项的所有类打包成一个归档文件,这种方法的问题在于,很难看到应用程序中有哪些库,如果在多个jar中使用相同的文件名(但使用不同的内容),也会有问题。

Spring Boot采用了一种不同的方法,让你可以直接嵌套jar。

要创建一个可执行jar,我们需要将spring-boot-maven-plugin添加到我们的pom.xml中,要做到这一点,请在dependencies部分下面插入以下几行:

<build>
 <plugins>
   <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
 </plugins>
</build>
spring-boot-starter-parentPOM包括<executions>配置以绑定repackage目标,如果你不使用父POM,你需要自己声明这个配置,有关详细信息,请参见插件文档。

保存你的pom.xml并从命令行运行mvn package,如下所示:

$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.0.5.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如果查看target目录,应该会看到myproject-0.0.1-snapshot.jar,文件的大小应该在10MB左右,如果你想查看内部,可以使用jar tvf,如下所示:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

你还应该看到一个更小的文件,名为myproject-0.0.1-snapshot.jar.originaltarget目录中,这是Maven在Spring Boot重新打包之前创建的原始jar文件。

要运行该应用程序,请使用java -jar命令,如下所示:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
  .   ____          _            __ _ _
 /\\ / ___''_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | ''_ | ''_| | ''_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  ''  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

如前所述,退出应用程序,按ctrl-c

12.下一步要读什么

希望这一节提供了一些Spring Boot基础知识,并帮助你编写自己的应用程序。如果你是面向任务的开发人员,你可能想跳到spring.io和查看一些入门指南来解决具体的“我如何用Spring实现它?”的问题,我们还有Spring boot特有的“How-to”参考文档。

Spring Boot repository也有一些你可以运行的示例,这些示例与代码的其余部分无关(也就是说,你不需要构建其余的代码来运行或使用示例)。


上一篇:安装 Spring Boot
下一篇:构建系统

我们今天的关于打包一个包含JSP和静态资源的Spring Boot应用程序springboot打包后加载静态资源问题的分享已经告一段落,感谢您的关注,如果您想了解更多关于IDEA Springboot 视图解析二器和静态资源的一些问题、IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)、Spring Boot 2.x 里面访问静态资源的坑、Spring Boot 参考指南(开发你的第一个Spring Boot应用程序)的相关信息,请在本站查询。

本文标签: