- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要 Websocket-Connection 的路径,而不需要 WebsocketAdapter 中的前缀。
F.E. web.xml 中给出的前缀是:
<servlet-mapping>
<url-pattern>
/test/
</url-pattern>
</servlet-mapping>
现在我用路径打开一个 Websocket
localhost:8080/test/this-is-the-path-i-need
将来我不想在更改 url 模式后更改我的 Java 服务器代码。
我在 WebsocketServlet 中的配置函数调用的 WebSocketCreator 中创建 WebsocketAdapter。
根据我的研究,我认为我可以通过 ServletMapping.getPathSpec() 获得它。问题是我不知道如何获取 ServletMapping。
有什么想法可以解决这个问题吗? (不限于ServletMapping可能的解决方案)
最佳答案
Note: your url-pattern of
/test/
would never match for a URI oflocalhost:8080/test/this-is-the-path-i-need
, as that URI is not a match.
If you wanted to to have that URI match, then you would use the url-pattern of/test/*
and then therequest.pathInfo
would have what you need/want.
无法使用标准 Servlet API 从 Web 应用程序内访问用于访问 servlet/filter/websocket 的 WEB-INF/web.xml
映射。
使用 Servlet API,您可以捕获所使用的完整路径或 URI,然后从中删除 Servlet 上下文路径前缀以获取所使用的路径。
为此,您将使用 ServletUpgradeRequest.getHttpServletRequest()
中的标准 Servlet HttpServletRequest
,收集路径,删除上下文路径前缀,可以选择收集 pathInfo,然后将生成的路径传递到您刚刚创建的 WebsocketAdapter
中。
Note:
ServletMapping
is an internal class to Jetty. It's not a public/formal API, so its use is discouraged for your declared use case of "In the future i dont want to change my Java-Server-Code...".
如果您仍然想使用内部 API,我建议完全跳过 ServletMapping
并直接针对此特定请求使用原样的 PathSpec
,您可以访问它通过 ServletUpgradeRequest
属性。
public static class MyPathSpecCreator implements WebSocketCreator
{
private static final String PATHSPEC_KEY = PathSpec.class.getName();
@Override
public Object createWebSocket(ServletUpgradeRequest upgradeRequest,
ServletUpgradeResponse upgradeResponse)
{
String pathSpecPattern = "/"; // default value (pick your own)
PathSpec pathSpec = (PathSpec) upgradeRequest.getServletAttribute(PATHSPEC_KEY);
if(pathSpec != null)
pathSpecPattern = pathSpec.getDeclaration();
return new MyWebSocketAdapter(pathSpecPattern);
}
}
关于java - 在WebsocketAdapter中获取ServletMapping [Jetty],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684512/
我尝试将这部分 web.xml 迁移到我的 Spring MVC 4.0(Servlet 3.0 不再有 web.xml ;-)JavaConfig: 部分 web.xml rest
我是一名优秀的程序员,十分优秀!