【问题标题】:Why is my request hitting two controllers?为什么我的请求会命中两个控制器?
【发布时间】:2014-07-24 19:15:03
【问题描述】:

我有以下 Spring 控制器:

@Controller
public class TypoWorkflowController {

    @RequestMapping(value = "/workflow/typo-workflow/moreInfo", method = RequestMethod.GET)
    public String serveMoreInfo(@RequestParam(value = "taskId", required=false) String taskId, ModelMap modelMap) {
        return "typo-workflow-more-info";
    }
}

我的 tiles-def 文件包含:

<definition name="typo-workflow-more-info" template="/WEB_INF/jsp/workflow/typo-workflow/moreInfo.jsp"/>

我的 JSP 是普通的旧 HTML。

当我点击 url /workflow/typo-workflow/moreInfo 时,Tomcat 会抛出一个 StackOverflowError

当我进入调试模式时,我看到我首先点击了我的控制器,正如我所期望的那样,但随后我点击了另一个控制器,方法是:

@Controller
@Order(value = Ordered.LOWEST_PRECEDENCE)
public class ContentServingController {

/* ... */
    @RequestMapping({"/*", "/**/*"})
    public ModelAndView serveContent(HttpServletResponse response, ModelMap model) {
        /* ... */
    }
}

当我四处寻找时,它 seeeeeeemed 就像我们在那里响应/WEB_INF/jsp/workflow/typo-workflow/moreInfo.jsp 的请求一样,但是对于以相同方式操作的其他控制器(返回一个查看名称)。

那么,谁能给我一些调试的指针。为什么我要为 JSP 打一个控制器呢? JSP 不应该是一个小 servlet 本身吗?

【问题讨论】:

  • 您的 HTML 中是否有任何可能导致对另一个控制器的第二次请求的引用?在调试期间,您确实检查了同一个线程正在调用您的控制器。
  • 查看日志可能会有所帮助:stackoverflow.com/questions/6468999/enabling-logging-in-spring ContentServingController 的目的是什么。也许有更好的方法来实现它的功能。

标签: java spring


【解决方案1】:

您的磁贴 def 指向 WEB_INF 文件夹,而它应该指向 WEB-INF 文件夹(破折号而不是下划线),因此 spring 不知道在应用程序中的何处查看,而只是发出正常的 http 请求,被通配符匹配捕获。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2012-12-19
    • 2021-06-11
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多