精华内容
下载资源
问答
  • 改造目标:SpringBoot + Maven,jar形式打包,非war形式,并且配置文件及webapp目录中的资源要外部化,通过maven-jar-plugin打包的jar为thin jar,jar包内不包含lib依赖及webapp。 改造后通过assembly打包目录结构...

    近期接手一个陈旧的项目基于SSM,SpringMVCSpringMybatis实现的管理项目,没使用依赖管理。

    改造目标:SpringBoot + Maven,jar形式打包,非war形式,并且配置文件及webapp目录中的资源要外部化,通过maven-jar-plugin打包的jar为thin jar,jar包内不包含lib依赖及webapp。

    改造后通过assembly打包目录结构如下:

     改造后最大的问题就是webapp外部化jsp资源访问404问题:java -cp 形式启动,通过开启trace日志发现:

    2020-08-19 10:43:18 [http-nio-8080-exec-3] DEBUG org.apache.jasper.servlet.JspServlet - JspEngine --> /WEB-INF/views/index.jsp
    2020-08-19 10:43:18 [http-nio-8080-exec-3] DEBUG org.apache.jasper.servlet.JspServlet - 	     ServletPath: /WEB-INF/views/index.jsp
    2020-08-19 10:43:18 [http-nio-8080-exec-3] DEBUG org.apache.jasper.servlet.JspServlet - 	        PathInfo: null
    2020-08-19 10:43:18 [http-nio-8080-exec-3] DEBUG org.apache.jasper.servlet.JspServlet - 	        RealPath: /tmp/tomcat-docbase.11133512333430917306.8080/WEB-INF/views/index.jsp
    2020-08-19 10:43:18 [http-nio-8080-exec-3] DEBUG org.apache.jasper.servlet.JspServlet - 	      RequestURI: /WEB-INF/views/index.jsp
    2020-08-19 10:43:18 [http-nio-8080-exec-3] DEBUG org.apache.jasper.servlet.JspServlet - 	     QueryString: null
    

    JspServlet 是tomcat-embed-jasper 中的jsp处理类,获取jsp文件是从tomcat的docBase目录,该目录通过debug发现,idea上是使用的本地src/main/webapp下的目录,服务器上是创建的临时目录,而临时目录并不存在webapp目录下的文件,所以访问后导致出现404问题。

    debug主要涉及类及方法:

    
    // TomcatEmbeddedServletContainerFactory prepareContext() getValidDocumentRoot() getDocumentRoot()
    // AbstractConfigurableEmbeddedServletContainer documentRoot()
    // 此方法获取的路径最终被用于docBase实际值
    protected final File getValidDocumentRoot() {
    		File file = getDocumentRoot();
    		// If document root not explicitly set see if we are running from a war archive
    		file = file != null ? file : getWarFileDocumentRoot();
    		// If not a war archive maybe it is an exploded war
    		file = file != null ? file : getExplodedWarFileDocumentRoot();
    		// Or maybe there is a document root in a well-known location
    		file = file != null ? file : getCommonDocumentRoot();
    		if (file == null && this.logger.isDebugEnabled()) {
    			this.logger
    					.debug("None of the document roots " + Arrays.asList(COMMON_DOC_ROOTS)
    							+ " point to a directory and will be ignored.");
    		}
    		else if (this.logger.isDebugEnabled()) {
    			this.logger.debug("Document root: " + file);
    		}
    		return file;
    }

    通过spring文档,发现只有server.tomcat.basedir, 并没有地方设置docBase的具体配置,那么只有通过自定义TomcatEmbeddedServletContainerFactory来实现自定义的docBase地址,默认该类在EmbeddedServletContainerAutoConfiguration中实例化,只需要自定义该类覆盖默认配置bean即可。

        @Bean
        public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
            TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
            log.info("Tomcat Current DocumentRoot => {}", factory.getDocumentRoot());
            factory.addContextCustomizers(context -> {
                log.info("Tomcat Customizer DocBase => {}", context.getDocBase());
                //temp dir if docbase = tomcat-docbase
                // 如果是临时目录,则获取系统变量,设置docBase,系统变量在启动脚本启动时设置
                if (context.getDocBase() != null && context.getDocBase().contains("tomcat-docbase")) {
                    String k = "external.webapp";
                    String docBase = System.getProperty(k);
                    if (docBase != null && docBase.trim().length() > 0) {
                        context.setDocBase(docBase);
                        log.info("Tomcat DocBase Reset => {}", docBase);
                    }
                }
            });
            return factory;
        }

    修改后再次部署:可以正常找到自定义目录下的jsp文件了

    2020-08-19 13:44:40 [http-nio-8080-exec-1] DEBUG org.apache.jasper.servlet.JspServlet - JspEngine --> /WEB-INF/views/index.jsp
    2020-08-19 13:44:40 [http-nio-8080-exec-1] DEBUG org.apache.jasper.servlet.JspServlet - 	     ServletPath: /index.jsp
    2020-08-19 13:44:40 [http-nio-8080-exec-1] DEBUG org.apache.jasper.servlet.JspServlet - 	        PathInfo: null
    2020-08-19 13:44:40 [http-nio-8080-exec-1] DEBUG org.apache.jasper.servlet.JspServlet - 	        RealPath: /home/tomz/demo/webapp/WEB-INF/views/index.jsp
    2020-08-19 13:44:40 [http-nio-8080-exec-1] DEBUG org.apache.jasper.servlet.JspServlet - 	      RequestURI: /WEB-INF/views/index.jsp
    2020-08-19 13:44:40 [http-nio-8080-exec-1] DEBUG org.apache.jasper.servlet.JspServlet - 	     QueryString: null

     

    展开全文
  • 如今很多公司都采用了前后端分离来开发项目,但对于后端开发者更喜欢前后端整合到一起来测试开发,很多人把按照之前的操作,把webapp放上静态资源,却发现访问404,今天我来告诉你个简单的方法,轻松解决这个问题!...

    如今很多公司都采用了前后端分离来开发项目,但对于后端开发者更喜欢前后端整合到一起来测试开发,很多人把按照之前的操作,把webapp放上静态资源,却发现访问404,今天我来告诉你个简单的方法,轻松解决这个问题!

    pom文件引入 插件 maven-resources-plugin 的  copy-resources插件,然后按照下面这样配置下,就可以轻松访问了!

     <!--拷贝资源文件 copy-resources-->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions> 
                        <execution>
                            <id>copy-public</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <resources>
                                    <resource>
                                        <directory>src/main/webapp/public</directory>
                                    </resource>
                                </resources>  
                             <outputDirectory>${project.build.directory}/public</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    展开全文
  • webapp-springboot:示例webapp springboot
  • Springboot-WebApp-源码

    2021-05-22 17:17:47
    Springboot-WebApp 基于Springboot开发的用户管理网站 v0: 完成基于SpringSecurity的登录认证,基于WebSocket的聊天室应用。 v1.0 - IN PROGRESS: 分离前后端,后端使用Springboot + SpringSecurity,跨域JWT认证,...
  • SpringBoot添加webapp目录

    万次阅读 2018-07-05 10:22:40
    一、文章简述 使用IDEA工具创建的SpringBoot项目本身是没有webapp目录的。如果我们想要添加webapp目录的话,可以手动添加。二、操作步骤1)点击IDEA右上角的Project Structure2)先点击下图中的+号,再点击Web3)...

    一、文章简述

        使用IDEA工具创建的SpringBoot项目本身是没有webapp目录的。如果我们想要添加webapp目录的话,可以手动添加。

    二、操作步骤

    1)点击IDEA右上角的Project Structure


    2)先点击下图中的+号,再点击Web


    3)修改Web模板的位置

     ①web模板未修改前的位置如下:

        

    ②先修改Path路径(点击上图中path框右边的小铅笔图标即可编辑),再修改Web Resource Directory


    注意:本项目是把webapp放置在main目录底下。大家可以根据自己的需求进行修改webapp的位置。

    PS:上图中的test1是项目名称。

    最后点击OK,附上效果图:



    三、相关

    1. 本Demo项目使用SpringBoot+Tk.mybatis+Maven为框架进行搭建。

    2. 搭建步骤及搭建过程中所遇到的相关问题,可以点击查看文章:SpringBoot + Tk.Mybatis + Maven项目搭建(IDEA)


    展开全文
  • springboot创建webapp目录文件夹

    千次阅读 2019-07-06 11:45:15
    springboot创建webapp目录文件夹 项目右键–>buildpath–>AddFolder 2.输入创建的文件夹名称 3设置过滤条件创建webaap文件夹完毕,resources雷同(去掉第四第五步) ...
  • springboot实现webapp的跳转 Configuration @EnableWebMvc public class WebAppConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { ...
  • SpringBoot-Webapp

    2020-12-17 13:25:19
    链接:https://pan.baidu.com/s/1VBoOO-I6RwX3yGopY969KQ 提取码:asdf
  • springboot没有webapp目录

    千次阅读 2019-07-18 11:02:20
    项目右键——>properties——>project faceets——>把“Dynamic Web Module”前面的钩加上(如果已勾上就先去掉保存再加上)——...将Content directory中的内容修改为:src/main/webapp——>在generate...
  • springboot 使用 webapp
  • Springboot访问webapp下jsp出现404问题 我们在初学springboot搭建项目时可能会发现自己访问webapp下的jsp文件访问出现404。 如下图所示: 如果error page中也能找到你访问的路径,并且也能找到/WEB-INF下的jsp文件,...
  • springboot访问webapp下静态资源

    千次阅读 2019-03-01 18:04:38
    springboot版本1.5以下是获取不到静态资源的,无论是相对路径还是绝对路径就是获取不到,在springboot版本1.5及以上就可以获取到,用相对路径就可以,这是个坑,忙了一天看一大哥和我遇到同样的问题 转载:...
  • springboot + webapp 目录下jsp文件404

    千次阅读 2019-03-26 21:15:20
    **springboot + webapp 目录下jsp 打包运行后jsp页面找不到 ** 原因 maven打包成jar的时候webapp目录并没有打包进去,需要改成war的方式 代码 application.yml spring: mvc: view: prefix: /WEB-INF/jsp/ ...
  • SpringBoot获取webapp目录下的文件路径

    千次阅读 2021-04-17 17:22:56
    SpringBoot项目中获取webapp目录下的文件资源,下面需要对于webapp下的XX.pdf文件进行处理,可以通过以下方式进行处理 // webapp目录 String classpath = this.getClass().getResource("/").getPath()....
  • 新建一个springboot的web项目如下 进入项目结构下 添加一个web 默认位置修改放在src/main下面 重新修改添加web的webapp的位置 登陆测试下页面可以正常访问不 错误信息如下 Path with "WEB-INF...
  • 资源文件配置 #jsp 支持 spring.mvc.view.suffix=.jsp spring.mvc.view.prefix=/WEB-INF/jsp/ #关闭默认模板引擎 spring.thymeleaf.cache=false spring.thymeleaf.enabled=false 3.springboot引入webapp文件夹 1)...
  • springboot没有webapp目录如何解决

    千次阅读 2020-04-14 08:54:55
    项目右键——>properties——>project faceets——>把“Dynamic Web Module”前面的钩加上(如果已勾上就先去掉保存再加上)——>...将Content directory中的内容修改为:src/main/webapp——>...
  • 1.选择项目配置 2.添加web 3.修改webapp地址 4.添加成功 5.最后引入支持jsp的jar包 1 <!--引入支持jsp的架包--> 2 <dependency&g...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,505
精华内容 5,002
关键字:

springbootwebapp

spring 订阅