【问题标题】:Adding servlet to embedded tomcat将 servlet 添加到嵌入式 tomcat
【发布时间】:2016-07-27 15:44:46
【问题描述】:

使用我的第一个嵌入式 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
  • 如何添加?而且,contextPath 和 appBase 到底应该做什么?我假设不知何故,我需要为 Tomcat 提供我的 servlet 类的路径,对吗?

标签: java jsp tomcat servlets


【解决方案1】:

我今天遇到了同样的问题:

嵌入式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>

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 2017-10-08
    • 2014-08-20
    • 2015-03-23
    • 2016-02-25
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多