0

Eclipse Oxygen 与 WebSphere Development Tools (WDT)、Spring MVC 4.3.14、Java 8 上的 WebSphere Liberty Core 18.0.0.1。启用的 Liberty 功能(故意不是最新的)是:

<featureManager>
    <feature>adminCenter-1.0</feature>
    <feature>localConnector-1.0</feature>
    <feature>jaxrs-1.1</feature>
    <feature>concurrent-1.0</feature>
    <feature>webProfile-6.0</feature>
    <feature>jaxb-2.2</feature>
</featureManager>

上下文根上的 JSP 工作正常,所以这是正确的。此外,ibm-web-ext.xml 有<context-root uri="/webapp/gatewaymvm/" />

Spring 启动日志表明我的@Controller类绑定到我期望的路径:

10:31:24,102 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:Looking for request mappings in application context: WebApplicationContext for namespace 'Spring MVC Dispatcher-servlet': startup date [Thu Apr 05 10:31:22 CDT 2018]; parent: Root WebApplicationContext
....
10:31:24,125 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:1 request handler methods found on class mypackage.QueryTransactionController: {public mypackage.QueryTransResponse mypackage.QueryTransactionController.processRequest(mypackage.QueryTransRequest,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException={[/QueryTransaction],methods=[POST],consumes=[application/json || application/xml],produces=[application/json || application/xml]}}
10:31:24,125 INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:Mapped "{[/QueryTransaction],methods=[POST],consumes=[application/json || application/xml],produces=[application/json || application/xml]}" onto public mypackage.QueryTransResponse mypackage.QueryTransactionController.processRequest(mypackage.QueryTransRequest,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException
...
10:31:24,130 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:1 request handler methods found on class mypackage.TestPostJSONDocumentController: {public java.lang.String mypackage.TestPostDocumentController.execute(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException={[/testPostJSONDoc],methods=[POST]}}
10:31:24,130 INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:Mapped "{[/testPostJSONDoc],methods=[POST]}" onto public java.lang.String mypackage.TestPostDocumentController.execute(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException

然而,当我点击任何这些 URL 时,它们会产生 404 响应并记录如下条目:

10:32:40,067 DEBUG org.springframework.web.servlet.DispatcherServlet:DispatcherServlet with name 'Spring MVC Dispatcher' processing POST request for [/webapp/gatewaymvm/testPostJSONDoc]
10:32:40,067 DEBUG org.springframework.webflow.mvc.servlet.FlowHandlerMapping:No flow mapping found for request with URI '/webapp/gatewaymvm/testPostJSONDoc'
10:32:40,068 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:Looking up handler method for path testPostJSONDoc
10:32:40,075 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping:Did not find handler method for [testPostJSONDoc]
10:32:40,076 WARN org.springframework.web.servlet.PageNotFound:No mapping found for HTTP request with URI [/webapp/gatewaymvm/testPostJSONDoc] in DispatcherServlet with name 'Spring MVC Dispatcher'

当部署到“传统”WAS 时,同样的应用程序可以按预期工作。我想我在 Liberty、Eclipse 下的 Liberty 或 Liberty 下的 Spring MVC 中缺少一些明显的东西。

4

1 回答 1

0

在我的测试过程中的某个时刻,我的代码从当前请求构建了一个 URL,我看到/webapp/gatewaymvm//resource了,两个斜杠在一起。

所以我尝试从我有上下文根的地方删除尾部斜杠/webapp/gatewaymvm/,这解决了这个问题。要么server.xml是我直接在那里安装了 WAR,要么application.xml是我在 EAR/Enterprise 项目中安装了 WAR。

有趣的是,JSP 在那里使用尾部斜杠,但 Spring 路径没有。

于 2018-04-06T22:03:00.433 回答