我正在用JavaEE Websocket技术编写一个简单的游戏。使用JSR356,我的服务器端套接字类如下所示:
@ServerEndpoint(
value = "/sock",
decoders = { SocketDecoder.class }
)
public class CardsSocket {
....
@OnMessage
public void onMessage(final SocketInput message, final Session session) {
...
}
...
}
它完美无缺,没有任何问题。但后来我决定创建一些信息和内容的网页。因此,在不改变上一课的任何内容的情况下,我创建了一个新的:
@ServerEndpoint(value = "/cards")
public class CardsWebPage extends HttpServlet {
@Override
public void doGet(...) {
...
}
}
在WEB-INF目录中配置web.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<servlet>
<servlet-name>CardsWebPage</servlet-name>
<servlet-class>server.CardsWebPage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CardsWebPage</servlet-name>
<url-pattern>/cards</url-pattern>
</servlet-mapping>
</web-app>
并且开始出现麻烦。我的servlet工作 - 浏览器在localhost上显示页面:8080 /卡,但客户端套接字类不能再启动 - 它会出现异常:
"javax.websocket.DeploymentException: The HTTP response from the server [HTTP/1.1 404 Not Found] did not permit the HTTP upgrade to WebSocket"
,似乎没有什么能解决它。我错过了一些文档吗?单个项目是否不可能同时包含servlet和websocket类?因为,如果我删除web.xml文件,那么套接字就像以前一样开始工作。服务器启动日志在两种情况下都不包含警告或错误。
答案 0 :(得分:0)
是的,也许火花是正确的,我应该简单地部署多个项目。
答案 1 :(得分:0)
你为什么用@ServerEndpoint装饰CardsWebPage?什么,或者你是否可以摆脱web.xml @WebServlet应该没问题。