在WebsocketAdapter中获取ServletMapping [Jetty]

时间:2018-06-04 15:55:33

标签: java websocket embedded-jetty

我需要Websocket-Connection的路径,而不需要我的WebsocketAdapter中的前缀。

F.E。 web.xml中给出的前缀是:

<servlet-mapping> 
    <url-pattern>
       /test/
    </url-pattern> 
</servlet-mapping>

现在我用Path

打开一个Websocket
  

本地主机:8080 /测试/这此结果的路径-I-需要

将来我不想在更改url-pattern后更改我的Java-Server-Code。

我在WebsocketServlet中的configure-function调用的WebSocketCreator中创建了我的WebsocketAdapter。

根据我的研究,我认为我可以通过ServletMapping.getPathSpec()获得它。问题在于我不知道如何获得ServletMapping。

任何想法如何解决这个问题? (不限于使用ServletMapping的可能解决方案)

1 个答案:

答案 0 :(得分:1)

  

注意:/test/的网址格式永远不会匹配localhost:8080/test/this-is-the-path-i-need的URI,因为该URI不匹配。
  如果你想让这个URI匹配,那么你将使用/test/*的网址格式,然后request.pathInfo将拥有你需要/想要的东西。

使用标准Servlet API无法从webapp中访问用于访问servlet / filter / websocket的WEB-INF/web.xml映射。

使用Servlet API捕获已使用的完整路径或URI,然后从中删除Servlet上下文路径前缀以获取所使用的路径。

为此,您将使用ServletUpgradeRequest.getHttpServletRequest()中的标准Servlet HttpServletRequest,收集路径,删除上下文路径前缀,可选地收集pathInfo,然后将生成的路径传递到vars() 1}}你刚刚创建的。

  

注意:WebsocketAdapter是Jetty的内部类。   它不是公共/正式的API,因此不鼓励使用它&#34;将来我不想改变我的Java-Server-Code ...&#34 ;

如果您仍想使用内部API,我建议您完全跳过ServletMapping并仅针对此特定请求使用已使用的ServletMapping,您可以通过{{1}访问它} attributes。

PathSpec