首页 > 解决方案 > spring-boot-2,在没有控制器的情况下提供普通的旧 jsp 页面?

问题描述

我正在尝试将旧的遗留应用程序从 JavaEE 转换为 spring-boot-2。

您如何在没有控制器的情况下实际提供普通的旧 JSP 页面?

我一直在一遍又一遍地搜索这个,听起来很奇怪,我无法弄清楚或找到一个实际可行的简单示例。我只是在尝试访问 JSP 时不断收到“404 Not Found”。

我正在使用 Maven,将其打包为 WAR 文件,并且可以将其作为“爆炸”运行(这似乎是最好的选择?),但仍然无法使其工作。

我不明白这怎么会这么难,在 spring-boot-2 中不再可能这样做了吗?

任何人都可以指出一个工作示例吗? 或者详细的说明怎么做?

编辑:这就是spring docs所说的。JSP 限制:

“使用 Jetty 和 Tomcat,如果使用战争包装,它应该可以工作。” 来自:https ://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

但究竟如何?这就是我想弄清楚的...

标签: javaspring-bootspring-mvcjspwar

解决方案


问题是 Spring Boot 默认接管了世界,即它注册DispatcherServlet了 servlet 映射/,从而劫持了 servlet 容器对*.jsp文件的处理。

为了让 servlet 容器能够正常处理 JSP,我们需要确保 SpringDispatcherServlet不会拦截它们,例如,确保它只处理带有特定后缀或特定前缀的请求。

例如,如果没有 JSP 路径以 开头/api/,那么我们可以将其用于DispatcherServlet,即任何请求/api/*都将由 Spring Boot 处理,而任何其他请求将由 servlet 容器处理。

为此,请将以下内容添加到application.properties文件中:

spring.mvc.servlet.path = /api

推荐阅读