Java + TomEE。一个项目中的Websockets和Servlet?

时间:2014-10-22 16:04:29

标签: java sockets servlets tomee

我正在用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文件,那么套接字就像以前一样开始工作。服务器启动日志在两种情况下都不包含警告或错误。

2 个答案:

答案 0 :(得分:0)

是的,也许火花是正确的,我应该简单地部署多个项目。

答案 1 :(得分:0)

你为什么用@ServerEndpoint装饰CardsWebPage?什么,或者你是否可以摆脱web.xml @WebServlet应该没问题。