gpt4 book ai didi

java - tomcat 8 中的 web.xml 与 websocket

转载 作者:行者123 更新时间:2023-12-05 07:48:48 24 4
gpt4 key购买 nike

我正在学习 java Tomcat 中的套接字。我有运行教程示例,如:

@ServerEndpoint("/echo") 
public class EchoServer {
@OnOpen
public void onOpen(Session session){
System.out.println(session.getId() + " has opened a connection");
}

@OnMessage
public void onMessage(String message, Session session){
System.out.println("Message from " + session.getId() + ": " + message);
}

@OnClose
public void onClose(Session session){
System.out.println("Session " + session.getId() + " has ended");
}
}

和一个正确的 html 文件通过 javascript 连接到这个套接字。我的问题出在 web.xml 中,我知道它不会影响套接字处理。但是有 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>SocketPOC</display-name>

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

</web-app>

我的套接字停止工作。当我删除 servlet 映射标志时:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>SocketPOC</display-name>

</web-app>

它又回来了。我想同时拥有它 - 就像我想通过此服务器服务器 html 文件并并行处理套接字一样。我做错了什么?

Tomcat 版本 8.0.33jre 1.9.0_91我在 eclipse Luna 下运行它(如果它有任何改变)。

最佳答案

正如您所说,Servlet 和 Websocket API 大部分是独立的,甚至可能有 standalone WebSocket containers .

当容器同时提供 Servlet API 和 Websocket API 时,Websocket 实现通常依赖于 Servlet 实现,并且可能会出现一些限制。

Tomcat 的 websocket 实现在您的应用程序中安装了一个绑定(bind)到 /*Filter ( WsFilter )。此过滤器拦截所有请求,如果它们与 websocket Endpoint 匹配,则将其重定向到端点。

然而,filter 只有在 servlet 愿意处理请求时才会被调用。通常 default servlet 处理其他 servlet 未处理的所有请求,但您将其 URL 模式更改为 *.html。所有 URI 未以 .html 结尾(如 /echo)的请求甚至不会被路由到您的应用程序,它们将收到一个非自定义的 404 未找到错误。

因为没有理由改变 default servlet 的绑定(bind)(所有不应该在网络上访问的资源,应该在 /WEB-INF文件夹),你问题中的问题更多的是好奇而不是真正的问题。

关于java - tomcat 8 中的 web.xml 与 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38158754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com