我应该在 web.xml 中放入什么来启动服务器端。我启动了 jetty,但只有 ui 可以工作,服务器端没有运行
我有下一个文件夹树:
src
|-main
|-java
| |-com
| |-example
| |-test
| |-ServerSide.java
|-webapp
|-index.html
|-WEB-INF
|-web.xml
服务器端类
package com.example.test;
import java.io.IOException;
import java.util.Date;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/testbattle")
public class ServerSide {
@OnOpen
public void onOpen(Session session) throws IOException {
System.out.println("Welcome" + new Date());
session.getBasicRemote().sendText("Hello websockets");
}
}
最佳答案
如果您关心的只是启动服务器端端点,那么您只需添加一个 main
方法即可作为您的应用程序入口,但请注意,这不会让 jetty maven 插件运行您的应用程序,因为 jetty 是一个基于 servlet 的 Web 容器。
package com.example.websocket;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer;
public class ServerStarter {
public static void main( String[] args ) throws Exception {
Server server = new Server(8080);
final ServletHolder servletHolder = new ServletHolder(new DefaultServlet());
final ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.addServlet(servletHolder, "/*");
server.setHandler(context);
WebSocketServerContainerInitializer.configureContext(context);
server.start();
server.join();
}
}
如果您打算在普通 Web 应用程序中使用 Websocket,则必须向 JettyServlet
(在您的情况下应该是 ServerSide
)注册一个 Websocket 处理程序(它是应该是子类型 ``) 并将后者 (JettyServlet
) 注册到 web.xml 文件中,而不是 ServerSide
类中:
web.xml:
<web-app> <display-name>WebSocketApp</display-name> <servlet> <servlet-name>wsservlet</servlet-name> <servlet-class>com.example.test.MyJettyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>wsservlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
MyJettyServlet:
package com.example.test; public class MyJettyServlet extends WebSocketServlet { @Override public void configure(WebSocketServletFactory factory) { factory.register(ServerSide.class); } }
服务器端:
@WebSocket public class ServerSide { @OnOpen public void onOpen(Session session) throws IOException { System.out.println("Welcome" + new Date()); session.getBasicRemote().sendText("Hello websockets"); } }
关于java - 如何编写 web.xml 以使用 maven 和 jetty 启动服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694109/