spring boot打包成war包的页面该放到哪里?

背景

经常有朋友问我,平时都是使用spring mvc,打包成war包发布到tomcat上,如何快速到切换到spring boot的war或者jar包上?

先来看看传统的war包样式是什么样子的?

  1. 传统的spring MVC格式的war包

可以看到,webapp/resouces文件存放css/js/html等静态文件,WEB-INF存放jsp动态文件。

对应的配置文件

@EnableWebMvc //mvc:annotation-driven
@Configuration
@ComponentScan({ "com.xxx.web" })
public class SpringWebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

}

对应xml的配置如下:

xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd ">

    package="com.xxxx.web" />

    class="org.springframework.web.servlet.view.InternalResourceViewResolver">

2.spring boot格式的jar包

jar的结构,spring 尽量避免jsp的动态文件,而是使用如Thymeleaf 、FreeMarker等模板引擎,因为jsp有很多限制。

28.4.5 JSP Limitations
When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations in the JSP support.

With Jetty and Tomcat, it should work if you use war packaging. An executable war will work when launched with java -jar, and will also be deployable to any standard container. JSPs are not supported when using an executable jar.

Undertow does not support JSPs.

Creating a custom error.jsp page does not override the default view for error handling. Custom error pages should be used instead.

3.spring boot 格式的war包

如何切换?

其实,通过上面的结构,我们可以看出,spring boot的标准规格还是不建议使用jsp的,推荐使用Thymeleaf 、FreeMarker等模板引擎,然后所有的静态文件同样存储在resources下面,可以使用代码配置动态代码

@Configuration
@EnableWebMvc
public class SpringConfig
{
    @Bean
    public InternalResourceViewResolver viewResolver()
    {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    }
}

或者静态属性配置

spring.mvc.static-path-pattern=/resources/**

来自定义配置。

也可以使用静态文件动态化

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
spring.resources.chain.strategy.fixed.enabled=true
spring.resources.chain.strategy.fixed.paths=/js/lib/
spring.resources.chain.strategy.fixed.version=v12

注意:centos下使用tomcat时,编译的jsp文件,上传的文件等等默认都存储在临时目录里,会

If you choose to use Tomcat on centos, be aware that, by default, a temporary directory is used to store compiled JSPs, file uploads, and so on. This directory may be deleted by tmpwatch while your application is running, leading to failures. To avoid this behavior, you may want to customize your tmpwatch configuration such that tomcat.* directories are not deleted or configure server.tomcat.basedir such that embedded Tomcat uses a different location.

参考资料

【1】https://www.mkyong.com/spring-boot/spring-boot-deploy-war-file-to-tomcat/

【2】https://www.baeldung.com/spring-boot-war-tomcat-deploy

【3】https://docs.spring.io/spring-boot/docs/2.1.2.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-static-content

Original: https://www.cnblogs.com/davidwang456/p/11840357.html
Author: 一天不进步,就是退步
Title: spring boot打包成war包的页面该放到哪里?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540511/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 红黑树以及JAVA实现(二)

    红黑树的删除 红黑树的删除相对于插入,会复杂很多。 我们分情况讨论 删除节点为叶子节点 分两种情况,删除节点是红色节点和删除节点为黑色节点 1.1 删除节点为红色节点 如果是红色节…

    Java 2023年6月13日
    072
  • MySQL 索引简介

    索引的含义和特点 索引有其明显的优势,也有不可避免的缺点: 创建和维护索引同样需要耗费时间,并随着数据量的增加而增加 索引也会占用一定的物理空间 增加、删除和修改数据时,要动态地维…

    Java 2023年6月8日
    076
  • 企业级微服务API网关Fizz-常用插件介绍

    前言 社区贡献的插件在 https://github.com/orgs/wehotel/repositories?type=all 下,一般以 fizz-plugin- 或 fiz…

    Java 2023年6月9日
    080
  • 最小生成树入门

    1.是一棵树 无回路 n个顶点一定有n-1条边 2.是生成树 包含全部顶点 n-1条边都在图里 3.边的权重和最小 4.最小生成树定义 给定一张边带权的无向联通图G = (V,E)…

    Java 2023年6月5日
    092
  • HTTPS的实现原理 —- 核心 SSL/TLS协议

    是在应用层和 传输层之间 添加的 安全层(SSL/TLS协议) 端口号:HTTP 默认是 80,HTTPS 默认是 443。 URL 前缀:HTTP 的 URL 前缀是 http:…

    Java 2023年6月6日
    060
  • 根据java实现企业微信消息推送功能

    第一步:申请企业微信注册企业(链接:https://work.weixin.qq.com/nl/sem/registe?s=c&from=1011017189&bd…

    Java 2023年6月7日
    087
  • DBeaver下载安装与连接MySQL数据库

    一、Dbeaver下载 官网下载地址:Download | DBeaver Community 点击”Windows 64 bit (installer)”…

    Java 2023年6月8日
    0192
  • python中三目运算符与条件判断语句

    对java而言,存在三目运算符如: [result] = [conditional expression] ? [expression1]: [expression2] 可以达到 …

    Java 2023年6月9日
    076
  • Spring透过ApplicationListener来触发contextrefreshedevent事件

    Spring通过 ApplicationListener接口来触发 contextrefreshedevent事件在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化…

    Java 2023年5月30日
    074
  • 面试官:你说说一条查询SQL的执行过程

    为了理解这个问题,先从Mysql的架构说起,对于Mysql来说,大致可以分为3层架构。 第一层作为客户端和服务端的连接,连接器负责处理和客户端的连接,还有一些权限认证之类。比如客户…

    Java 2023年6月13日
    080
  • ucore操作系统学习(二) ucore lab2物理内存管理分析

    一、lab2物理内存管理介绍 操作系统的一个主要职责是管理硬件资源,并向应用程序提供具有良好抽象的接口来使用这些资源。 而内存作为重要的计算机硬件资源,也必然需要被操作系统统一的管…

    Java 2023年6月8日
    0109
  • 自定义spring boot starter 初尝试

    从几篇博客中了解了如何自定义starter,大概分为以下几个步骤: 1 引入相关依赖; 2 生成属性配置类; 3 生成核心服务类; 4 生成自动化配置类; 5 注册配置/META-…

    Java 2023年6月13日
    064
  • Java并发编程艺术系列-三、Java内存模型

    三、Java内存模型 本章大致分四个部分: Java内存模型的基础:主要介绍内存模型相关的基本概念; Java内存模型中的顺序一致性:主要介绍重排序与顺序一致性内存模型; 同步原语…

    Java 2023年6月9日
    079
  • fastposter v2.8.3 发布 电商海报生成器

    fastposter v2.8.3 发布 电商海报生成器 🔥🔥🔥 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发。贰维🐴海…

    Java 2023年6月5日
    073
  • 二分搜索树

    目录 一、概念及其介绍 二、适用说明 三、二分查找法过程图示 四、Java 实例代码 一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树…

    Java 2023年6月5日
    0103
  • Java源码赏析(六)Java String 三顾

    在大致了解了String之后,可能有的读者发现了,我们并没有谈到CharSequence接口。 原因是在这一节,CharSequence要和StringBuilder(Java1….

    Java 2023年6月8日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球