Java 嵌入式防波堤9';t为@Webservlet工作

Java 嵌入式防波堤9';t为@Webservlet工作,java,embedded-jetty,Java,Embedded Jetty,我在javaEE应用程序中使用Java11和嵌入式jetty 9,我试图使用@Websevlet注释来发布我的servlet,但它不起作用,我不知道为什么。 我的入门课是java import org.eclipse.jetty.annotations.AnnotationConfiguration; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.*; public class Start

我在javaEE应用程序中使用Java11和嵌入式jetty 9,我试图使用@Websevlet注释来发布我的servlet,但它不起作用,我不知道为什么。 我的入门课是java

import org.eclipse.jetty.annotations.AnnotationConfiguration;

import org.eclipse.jetty.server.Server;

import org.eclipse.jetty.webapp.*;

public class Start  {

    public static  void main(String[] args) throws Exception {
        Server server = new Server(80);

        WebAppContext wacHandler = new WebAppContext();
        wacHandler.setConfigurations(new Configuration[]
                {
                        new AnnotationConfiguration(),
                        new WebInfConfiguration(),
                        new WebXmlConfiguration(),
                        new MetaInfConfiguration(),
                        new FragmentConfiguration(),
                        new JettyWebXmlConfiguration()
                });
        server.setHandler(wacHandler);

        server.start();
        server.join();
    }
}
我的你好世界级

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet( "/getservlet")
public class ServletX extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
      
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Hi there..</h1>");
    }

}

import java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(“/getservlet”)
公共类ServletX扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“你好…”);
}
}

我没有web.xml配置,应该这样做吗?

如果
ServletX
在war文件中,这意味着它在
web-INF/classes/
存档目录中,那么就是您声明的配置(特别是
注释配置
)将对WAR文件执行字节码扫描并加载
@WebServlet
注释

还请注意,
WebAppContext
将需要指向此WAR文件,而您的代码示例不会这样做

WebAppContext wacHandler=new WebAppContext();
setWar(“/path/to/myapp.war”);
// ... 更多设置
但是!如果
ServletX
不在WAR文件中,而是与嵌入的jetty
Start
类一起存放,那么您需要公开servlet容器,以便通过字节码扫描步骤进行扫描


您始终可以为命名的记录器
org.eclipse.jetty
打开调试/精细级别日志记录,并查看与部署和字节码扫描相关的活动。

ServletX在哪里?嵌入式Jetty使用的是WAR文件吗?或者它在其他地方,比如uberjar,或者容器类路径中?嵌入式jetty使用的WAR文件中的servletX那么为什么您在示例代码中没有引用该WAR文件呢?
WebAppContext
应该有一个
setWar()
.setBaseResource()
调用来对抗WAR(或解包的webapp目录),它才能工作。谢谢您的帮助,先生,我有第二个案例may servletX在我的嵌入式jetty start类中。您能提供更多关于这个案例的详细信息吗。