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

Grails 4应用新环境部署问题:Tomcat请求被错误添加.jsp后缀

问题排查与解决建议

核心问题定位

请求/OurApp/loginStatus/本应触发Grails Controller的defaultAction(映射到index方法),但新Tomcat环境中被解析为寻找/loginStatus/index.jsp,说明Tomcat的默认资源解析逻辑优先于Grails的DispatcherServlet处理了该请求。

可能原因与解决步骤

1. 调整Tomcat默认页解析优先级

Tomcat默认会对以/结尾的目录请求自动查找welcome-file-list中配置的文件(如index.jsp、index.html),这会抢占Grails的请求处理:

  • 编辑应用的web.xml,修改<welcome-file-list>,将Grails的入口页面(如index.gsp)放在最前面,或者移除index.jsp:
    <welcome-file-list>
        <welcome-file>index.gsp</welcome-file>
    </welcome-file-list>
    
  • 优先修改应用自身配置,不推荐全局修改Tomcat的conf/web.xml。

2. 确保Grails DispatcherServlet优先处理请求

检查应用web.xml中DispatcherServlet的映射规则,确保它能捕获所有请求:

  • 确认DispatcherServlet的url-pattern为/*(Grails默认配置),保证所有请求先经过Grails调度器:
    <servlet-mapping>
        <servlet-name>grails</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
  • 若存在其他servlet(如JSP servlet)的映射规则,确保Grails的servlet映射顺序在前面。

3. 检查Grails URL映射配置

确认grails-app/conf/UrlMappings.groovy中无冲突规则,可添加显式映射确保defaultAction生效:

class UrlMappings {
    static mappings = {
        "/loginStatus/"(controller: "loginStatus", action: "index")
        // 其他规则...
    }
}

4. 远程环境调试方案(无调试工具时)

  • 在LoginStatusController的index方法中添加日志,确认是否被调用:
    def index() {
        log.info("LoginStatusController index method triggered")
        render([success: true] as JSON)
    }
    
  • 临时测试请求路径/OurApp/loginStatus/index,若能正常返回,可进一步验证是defaultAction的映射问题。
  • 调整Tomcat的RequestDumperFilter配置,增加请求过滤链的执行顺序日志,确认请求是否经过Grails的DispatcherServlet。

验证步骤

  1. 应用配置修改后重启Tomcat。
  2. 发送/OurApp/loginStatus/请求,检查日志是否显示LoginStatusController的index方法被调用,且返回正确的JSON响应。

内容的提问来源于stack exchange,提问作者tylerwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:15:35