【问题标题】:Spring mapped servlet not called in jetty-maven-plugin在 jetty-maven-plugin 中未调用 Spring 映射的 servlet
【发布时间】:2018-04-01 15:17:38
【问题描述】:

had to migratemaven-jetty-pluginjetty-maven-plugin。当我使用jetty:run 启动码头时,我可以看到已部署上下文,正在初始化应用程序但未找到 servlet。它与maven-jetty-plugin 一起正常工作。

Java

@RequestMapping(value = "/handshake", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public void performHandShake(@org.springframework.web.bind.annotation.RequestBody String requestData, HttpServletResponse response) throws IOException {

web.xml

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Maven

        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${maven-jetty-plugin.version}</version>

            <configuration>
                <webApp>
                    <contextPath>pos-json</contextPath>
                </webApp>
                <scanIntervalSeconds>0</scanIntervalSeconds>

浏览器http://localhost:8080/

No context on this server matched or handled this request.
Contexts known to this server are:
pos-json ---> o.e.j.m.p.JettyWebAppContext@6c6366cf{pos-json,file:///C:/dev/projekty/pos-backend/src/main/webapp/,AVAILABLE}{file:///C:/dev/projekty/pos-backend/src/main/webapp/}

浏览器http://localhost:8080/pos-json/handshake

HTTP ERROR 404
Problem accessing /pos-json/handshake. Reason:   Not Found

码头

[INFO] Classes = C:\dev\projekty\pos-backend\target\classes
[INFO] Context path = pos-json
[INFO] Tmp directory = C:\dev\projekty\pos-backend\target\tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] web.xml file = file:///C:/dev/projekty/pos-backend/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = C:\dev\projekty\pos-backend\src\main\webapp
2017-10-20 14:21:17.907:INFO:oejs.Server:main: jetty-9.4.7.v20170914
2017-10-20 14:21:23.050:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=4520ms
2017-10-20 14:21:23.486:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2017-10-20 14:21:23.486:INFO:oejs.session:main: No SessionScavenger set, using defaults
2017-10-20 14:21:23.490:INFO:oejs.session:main: Scavenging every 660000ms
2017-10-20 14:21:24.498:INFO:oejshC.pos_json:main: Initializing Spring FrameworkServlet 'dispatcher'
2017-10-20 14:21:39,828 INFO [main] o.s.w.s.m.m.a.RequestMappingHandlerMapping Mapped "{[/handshake],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public void pos.backend.device.controller.DeviceJsonController.performHandShake(java.lang.String,javax.servlet.http.HttpServletResponse) throws java.io.IOException
2017-10-20 14:21:40,167 INFO [main] o.s.w.s.m.m.a.RequestMappingHandlerAdapter Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Fri Oct 20 14:21:24 CEST 2017]; root of context hierarchy
2017-10-20 14:21:40.783:INFO:oejsh.ContextHandler:main: Started o.e.j.m.p.JettyWebAppContext@6c6366cf{pos-json,file:///C:/dev/projekty/pos-backend/src/main/webapp/,AVAILABLE}{file:///C:/dev/projekty/pos-backend/src/main/webapp/}
2017-10-20 14:21:41.017:INFO:oejs.AbstractConnector:main: Started ServerConnector@179efe9a{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}

【问题讨论】:

  • 我要做的第一件事是在码头插件配置的上下文路径中添加前导“/”。然后请记住,您的端点需要 POST 请求。而浏览器发出GET。如果设置正确,浏览器会得到 405 Method Not Allowed。
  • 感谢您的提示。当我将参数更新为 /smartpos-json/ 时,它开始工作了!原始插件没有使用斜线。你能写答案,以便我稍后接受吗?
  • 考虑完成!

标签: java maven spring-mvc maven-jetty-plugin


【解决方案1】:

documentation 关于jetty-maven-plugin 的配置看来,contextPath 他们建议您可能我必须承认非常模糊)需要添加前导正斜杠"/",以便您的 maven 插件定义应为:

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${maven-jetty-plugin.version}</version>

        <configuration>
            <webApp>
                <contextPath>/pos-json</contextPath>
            </webApp>
            <scanIntervalSeconds>0</scanIntervalSeconds>
        </configuration>
    </plugin>

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 2013-04-24
    • 2016-03-23
    • 1970-01-01
    • 2016-02-26
    • 2012-11-23
    • 1970-01-01
    • 2012-04-17
    • 2012-01-03
    相关资源
    最近更新 更多