将Servlet添加到嵌入式Tomcat

3
与我的第一个嵌入式Tomcat应用程序一起工作,这可能是一个简单的问题。
我创建了一个Servlet,我想以Java编程方式将其添加到Tomcat中。我的Driver类如下所示:
    String contextPath = "/";
    String appBase = ".";
    Tomcat tomcat = new Tomcat();     
    tomcat.setPort(Integer.valueOf(port.orElse("8080") ));
    Context ctx = tomcat.addContext(contextPath, appBase);
    Tomcat.addServlet(ctx, "HelloWorldServlet", new HelloWorldServlet());

    ctx.addServletMapping("/*", "HelloWorldServlet");

    tomcat.start();
    tomcat.getServer().await();

我的Servlet有以下定义。
 @WebServlet(
    name = "HelloWorldServlet",
    urlPatterns = {"/helloWorld"}
)

当我尝试运行这个程序时,它告诉我有一个

的错误。
java.lang.illegalArgumentException: Main resource set specified [.......\target\tomcat.8080\webapps\.] is not valid.

我是否正确添加了我的servlet?基本上,我想能够访问localhost:8080/helloWorld并触发我的servlet。

你的URL缺少上下文信息。应该是类似于http://localhost:8080/yourWebApp/helloWorld这样的格式。 - Tim Biegeleisen
我该如何添加呢?另外,contextPath和appBase到底是用来做什么的呢?我猜测,我需要以某种方式向Tomcat提供我的servlet类的路径,对吗? - Kevin
1个回答

2
今天我遇到了同样的问题:
嵌入式Tomcat:
public class App 
{
    public static void main( String[] args ) throws LifecycleException
    {
        int port = 8080;
        Tomcat tomcat = new Tomcat();
        tomcat.setBaseDir("temp");
        tomcat.setPort(port);

        String contextPath = "/";
        String docBase = new File(".").getAbsolutePath();

        Context context = tomcat.addContext(contextPath, docBase);

        HttpServlet servlet = new HelloWorldServlet();
        String servletName = "HelloWorld";
        String urlPattern = "/helloWorld";

        tomcat.addServlet(contextPath, servletName, servlet);      
        context.addServletMappingDecoded(urlPattern, servletName);

        tomcat.start();
        tomcat.getServer().await();

    }
}

我的Servlet:

public class HelloWorldServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();

        writer.println("Hello World!");

    }

}

pom.xml

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <tomcat.version>8.0.48</tomcat.version>
</properties>

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-logging-juli</artifactId>
        <version>${tomcat.version}</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接