java - 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/
但究竟如何?这就是我想弄清楚的...
解决方案
问题是 Spring Boot 默认接管了世界,即它注册DispatcherServlet
了 servlet 映射/
,从而劫持了 servlet 容器对*.jsp
文件的处理。
为了让 servlet 容器能够正常处理 JSP,我们需要确保 SpringDispatcherServlet
不会拦截它们,例如,确保它只处理带有特定后缀或特定前缀的请求。
例如,如果没有 JSP 路径以 开头/api/
,那么我们可以将其用于DispatcherServlet
,即任何请求/api/*
都将由 Spring Boot 处理,而任何其他请求将由 servlet 容器处理。
为此,请将以下内容添加到application.properties
文件中:
spring.mvc.servlet.path = /api
推荐阅读
- python - Python Xarray.to_dataframe() 导致操作系统错误
- php - 使用 PHP cURL for paypal 获取交易详细信息时出现安全错误
- javascript - 为什么使用 Create React App 生成的 TypeScript 项目可以找到模块而 Express 项目却不能?
- git - 递归更改 Git 子模块路径
- typescript - 如何将对象键的类型限制为命名空间常量?
- javascript - 输入隐藏字段中的敏感数据
- json - 输入时的 Angular Forms Initi 属性
- android - robolectric 的 java.lang.IllegalStateException
- html - 盒子阴影仅适用于标题
- hadoop - 使用转义字符创建外部 Hadoop 表