https://sparktutorials.github.io/2015/11/08/spark-websocket-chat.htmlから例を取得し、Tomcat に戦争としてデプロイして Web サーバーで実行したいと考えています。基本的なリクエスト (たとえば、get など) の例をいくつか見つけましたが、そのような方法は Web ソケットでは機能しません。
public class Chat implements SparkApplication{
static Map<Session, String> userUsernameMap = new HashMap<>();
static int nextUserNumber = 1; //Used for creating the next username
public static void main(String[] args) {
new Chat().init();
}
//Sends a message from one user to all users, along with a list of current usernames
public static void broadcastMessage(String sender, String message) {
userUsernameMap.keySet().stream().filter(Session::isOpen).forEach(session -> {
try {
session.getRemote().sendString(String.valueOf(new JSONObject()
.put("userMessage", createHtmlMessageFromSender(sender, message))
.put("userlist", userUsernameMap.values())
));
} catch (Exception e) {
e.printStackTrace();
}
});
}
//Builds a HTML element with a sender-name, a message, and a timestamp,
private static String createHtmlMessageFromSender(String sender, String message) {
return article().with(
b(sender + " says:"),
p(message),
span().withClass("timestamp").withText(new SimpleDateFormat("HH:mm:ss").format(new Date()))
).render();
}
@Override
public void init() {
String route = "/chat";
webSocket(route, ChatWebSocketHandler.class);
}
}
私がそれを実行すると、私は得る
org.apache.catalina.core.StandardContext.filterStart 例外開始フィルター SparkFilter java.lang.IllegalStateException: WebSockets は組み込みサーバーでのみサポートされます
アット ラインwebSocket(route, ChatWebSocketHandler.class);
インvoid init()
メソッド。
smth が私の web.xml に依存している場合 (私は変更していません)、リストは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Messenger</display-name>
<filter>
<filter-name>SparkFilter</filter-name>
<filter-class>spark.servlet.SparkFilter</filter-class>
<init-param>
<param-name>applicationClass</param-name>
<param-value>com.barbarian.messenger.Chat</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SparkFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
new SparkFilter();
その行の前に置くと(試してみました)、私は得ました
org.apache.catalina.core.StandardContext.filterStart 例外開始フィルター SparkFilter java.lang.IllegalStateException: WebSockets は組み込みサーバーでのみサポートされます
同じ行で。
誰かがそれを有効に実行するという考えを持っていますか?