You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot项目部署Tomcat后增改操作报405,Eclipse内运行正常

问题原因

  1. 独立Tomcat默认禁用DELETE、PUT等非标准HTTP方法,而Spring Boot内嵌Tomcat默认放开了这类方法限制,这是你跑spring-boot:run正常、部署后报405的核心原因。
  2. JS代码里硬编码contextPath = "/temp"不灵活,部署到Tomcat时contextPath由war包名称或Tomcat配置决定,硬编码会导致请求路径不匹配,出现跳错地址的问题。
  3. 你当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:15:02