SpringBoot项目部署Tomcat后增改操作报405,Eclipse内运行正常
问题原因
- 独立Tomcat默认禁用
DELETE、PUT等非标准HTTP方法,而Spring Boot内嵌Tomcat默认放开了这类方法限制,这是你跑spring-boot:run正常、部署后报405的核心原因。 - JS代码里硬编码
contextPath = "/temp"不灵活,部署到Tomcat时contextPath由war包名称或Tomcat配置决定,硬编码会导致请求路径不匹配,出现跳错地址的问题。 - 你当前AJAX拼接的路径多了多余的斜杠,可能导致Spring MVC路径映射匹配失败。
解决方案
解决405方法不允许问题
打开Tomcat安装目录下的conf/web.xml文件,找到DefaultServlet的配置项,添加允许修改方法的初始化参数:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
如果配置后仍然报错,检查同文件下是否有禁用DELETE/PUT方法的安全约束配置,如有直接删除即可。
解决contextPath路径匹配问题
不要在JS中硬编码contextPath,改为从服务端动态获取:
- 如果使用JSP模板:
const contextPath = "<%=request.getContextPath()%>";
- 如果使用Thymeleaf模板:
<script th:inline="javascript"> const contextPath = /*[[@{/}]]*/ ''; </script>
修正AJAX路径拼接错误
把原来的路径拼接代码删掉多余的斜杠:
// 修改前 url: contextPath+"/"+storageTypeUrl+"/?index="+index, // 修改后 url: contextPath+"/"+storageTypeUrl+"?index="+index,
检查war包部署配置
确认你的Spring Boot启动类已经继承SpringBootServletInitializer并重写configure方法,否则部署到独立Tomcat时会出现部分映射失效的问题:
@SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

