如何从main方法加载servlet

how to load servlet from main method

我有 Main class,我在那里做 api 请求并与数据库集成。 我还创建了 servlet,我想从客户端获取数据并将其放入数据库中。 它是 Main class 中的主要方法:

public static void main(String[] args) throws IOException {

    serverSocket = new ServerSocket(8888); // Server port
    System.out.println("Server started. Listening to the port 8888");

    initProviderList();
    initNewsAppDB();

    Thread newFeedsUpdate = new Thread(new NewFeedsUpdate(providerList));
    newFeedsUpdate.start();
}

它是 servlet:

  @WebServlet(name = "GetClientTokenServlet")
public class GetClientTokenServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String token = request.getParameter("token");
        System.out.println(token);
    }

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_4_0.xsd"
        version="4.0">

    <servlet>
        <servlet-name>GetClientTokenServlet</servlet-name>
        <servlet-class>GetClientTokenServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>GetClientTokenServlet</servlet-name>
        <url-pattern>/GetClientTokenServlet</url-pattern>
    </servlet-mapping>
</web-app>

如何将 GetClientTokenServlet(以便能够侦听客户端调用)设置到 main 方法中?

在大多数情况下,Java 中的 Web 应用程序没有 main 方法。 main方法是由一个servlet容器实现的,比如Tomcat, and that's what you actually run. The servlet container discovers your application's classes and web.xml through some method, often by finding them in a WAR file你已经放到了servlet容器定义的目录下,比如Tomcat的webapps目录。然后 servlet 容器实例化在您的 web.xml 文件中标识的 servlet。

也就是说,有一些 Web 服务器可以实例化为您自己的应用程序中的组件。通常用于此目的的服务器是 Jetty。 Jetty 是一个 Web 服务器,它将传入的请求传递给您定义的 "handlers"。您可以让 Jetty 从您的 WAR 文件加载您的整个 Web 应用程序并实例化您的 web.xml 中定义的 servlet,或者您可以使用 ServletHandler 手动注册 servlet;在这种情况下,您不需要 web.xml.