tomcat - tomcat VS Wildfly 中不同的 URI 处理

标签 tomcat spring-boot wildfly-10

我使用嵌入式 tomcat 开发了我的 Spring boot 应用程序。然后我需要它在 Wildfly10.0.0.Final 上部署

两者处理请求的方式看起来很不一样

我在浏览器中点击的 URL 是:

http://localhost:8181/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123

http://<My_TEST_WF_SERVER>:10080/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123

当我运行 spring boot 应用程序时,控制台输出如下所示,“Looking up handler method for path”与上面的路径具有相同的路径,因为它具有上下文根:

> 2018-03-12 16:32:49.996 DEBUG 15252 --- [0.1-8181-exec-1]
> o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name
> 'dispatcherServlet' processing GET request for
> [/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> 2018-03-12 16:32:50.003 DEBUG 15252 --- [0.1-8181-exec-1]
> s.w.s.m.m.a.RequestMappingHandlerMapping : **Looking up handler method
> for path**
> /mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123
> 2018-03-12 16:32:50.005 DEBUG 15252 --- [0.1-8181-exec-1]
> s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method
> [public com.comp.mywebservices.domain.model.MLResponse
> com.comp.mywebservices.rest.mywebservicesController.getRequestWithGhostURLs(javax.servlet.http.HttpServletRequest,org.springframework.util.MultiValueMap<java.lang.String,
> java.lang.String>)] 2018-03-12 16:32:50.005 DEBUG 15252 ---
> [0.1-8181-exec-1] o.s.web.servlet.DispatcherServlet        :
> Last-Modified value for
> [/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> is: -1

Wildfly 中的日志如下所示,查找路径的处理程序方法在 wildfly 中没有上下文根:

> 2018-03-12 16:20:40,007 DEBUG
> [org.springframework.web.servlet.DispatcherServlet] (default task-1)
> DispatcherServlet with name 'dispatcherServlet' processing GET request
> for
> [/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> 2018-03-12 16:20:40,031 DEBUG
> [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]
> (default task-1) Looking up handler method for path
> /FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123
> 2018-03-12 16:20:40,034 DEBUG
> [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]
> (default task-1) Did not find handler method for
> [/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> 2018-03-12 16:20:40,035 DEBUG
> [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping]
> (default task-1) Matching patterns for request
> [/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> are [/**] 2018-03-12 16:20:40,036 DEBUG
> [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping]
> (default task-1) URI Template variables for request
> [/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> are {} 2018-03-12 16:20:40,037 DEBUG
> [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping]
> (default task-1) Mapping
> [/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> to HandlerExecutionChain with handler [ResourceHttpRequestHandler
> [locations=[ServletContext resource [/], class path resource
> [META-INF/resources/], class path resource [resources/], class path
> resource [static/], class path resource [public/]],
> resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@64e7e2df]]]
> and 1 interceptor 2018-03-12 16:20:40,038 DEBUG
> [org.springframework.web.servlet.DispatcherServlet] (default task-1)
> Last-Modified value for
> [/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123]
> is: -1 2018-03-12 16:20:40,040 DEBUG
> [org.springframework.web.servlet.DispatcherServlet] (default task-1)
> Null ModelAndView returned to DispatcherServlet with name
> 'dispatcherServlet': assuming HandlerAdapter completed request
> handling 2018-03-12 16:20:40,040 DEBUG
> [org.springframework.web.servlet.DispatcherServlet] (default task-1)
> Successfully completed request

我不确定是什么原因造成的,当我在本地将它作为 Spring 引导应用程序运行时,nmy 应用程序工作正常,但我需要部署到 Wildfly 以获得依赖项。

我的 RestController 方法如下所示:

@RequestMapping(value={"/mywebservices/**"},
            method = RequestMethod.GET,
            produces = {"application/vnd.api+json"} )

    public MLResponse getRequestWithGhostURLs(HttpServletRequest request,
                                             @RequestParam MultiValueMap<String,String> multiParams) {

最佳答案

通过点击和试用得到了答案。问题是我已经引入了 Wildfly 也需要的 jboss-web.xml 并且我已经在那里定义了上下文根(同一个)所以根据 wildfly 第一个是 wildfly 的上下文根(它省略了它)然后它在 @RequestMapping 中寻找我的 Rest Controller 的上下文根,它不在那里,所以它在那里没有看到它。在 tomcat/Spring boot 中,只有一个容器上下文根,没有其他的。所以对于 wildfly,我的 URL 是这样工作的:

http://<My_TEST_WF_SERVER>:10080/mywebservices/mywebservices/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123

它的行为正确,因为 mywebservices 是应用程序的上下文根。因为我只有一个 RestController,所以我没有涉及多个上下文根的问题,以防我用不同或相似的注释我的第二个。

所以在这种情况下,我只是从下面删除了 mywebservices 或者从 RestController 中删除了它。 (两者都有效,我认为将其从 RestController 中删除是正确的方法,除非您有多个 Controller ,否则您将在 ../mywebservices//之后为 Controller 附加 URI 映射值

http://<My_TEST_WF_SERVER>:10080/mywebservices/<controller_defined_uri_value>/FinancialTransactions/001/CounterpartyId/111/ClientId/222/MarketIdentifier/MID/SecurityId/333/User/123123

所以我的 jboss-web.xml 看起来像:

<jboss-web>
    <security-domain>java:/jaas/mywebservicessecurity</security-domain>
    <context-root>mywebservices</context-root>

</jboss-web>

关于tomcat - tomcat VS Wildfly 中不同的 URI 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229430/

相关文章:

authentication - AuthnRequest (Keycloak) 中的 SAML 2 扩展

Spring Boot Batch - 不包括 JobLauncherCommandLineRunner

java - 意外错误(类型=未找到,状态=404)

netbeans - Java EE运行错误 "java.net.MalformedURLException: no protocol: ${client.url}"

tomcat - 如何更改 Web-Inf/lib 的路径

java - 使用 java 使用 servlet 和 web 项目时出现问题

tomcat - 使用 LDAP 身份验证和 JDBC 授权实现 Tomcat 领域

Java : Reload webapp in the servlet and then redirect request

spring - RSocket 和 Spring 不处理多个请求

server - 如何将自定义JNDI资源添加到wildfly-10中,类似于glassfish服务器的<custom-resource>?