java - 嵌入 Tomcat 并向部署的应用程序发出请求

标签 java tomcat tdd htmlunit

好吧,我完全卡住了。我想以嵌入式模式运行 Tomcat,这样我就可以测试应用程序而无需在单独的进程中运行服务器。我遗漏了一些简单、愚蠢但重要的东西,我需要你的帮助才能看到它。

此测试失败并出现 HTTP 错误 400,Bad Request。我试过 MemoryProtocolHandler、context.invoke(),...我不知道该怎么做。也许你看到了一些简单的东西。

package ca.jbrains.jsfunit.learning.test;

import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.connector.Request;
import org.apache.catalina.realm.MemoryRealm;
import org.apache.catalina.startup.Embedded;
import org.junit.After;
import org.junit.Test;

import com.gargoylesoftware.htmlunit.WebClient;

public class LearnEmbeddedTomcatTest {
    private Embedded embedded;
    private Container host;
    private Engine engine;

    @Test
    public void deploySampleApplicationFromFileSystem() throws Exception {
        String tomcatPath = "/Users/jbrains/ThirdParty/apache-tomcat-5.5.28-embed";

        // Create an embedded server
        embedded = new Embedded();
        embedded.setCatalinaHome(tomcatPath);
        embedded.setRealm(new MemoryRealm());

        // Create an engine
        engine = embedded.createEngine();
        engine.setDefaultHost("localhost");

        // Create a default virtual host
        host = embedded.createHost("localhost", tomcatPath + "/webapps");
        engine.addChild(host);

        // Create an application context
        Context context = embedded.createContext("TddJsfWeb", tomcatPath
                + "/webapps/TddJsfWeb");
        host.addChild(context);

        // Install the assembled container hierarchy
        embedded.addEngine(engine);

        // Assemble and install a default HTTP connector
        Connector connector = embedded.createConnector("localhost", 8080,
                "http");
        embedded.addConnector(connector);

        // Start the embedded server
        embedded.setAwait(true);
        embedded.start();

        WebClient webClient = new WebClient();
        webClient.getPage("http://localhost:8080/TddJsfWeb/static.xhtml");
    }
}

解压后的 .war 肯定在 /Users/jbrains/ThirdParty/apache-tomcat-5.5.28-embed/webapps/TddJsfWeb/...static.xhtml 位于解压后的 .war 文件夹的根目录中。

拜托,拜托,让我看看我有多蠢。谢谢。

最佳答案

我在使用 Tomcat 时也有类似的经历。我最终改用 Jetty - 从代码的角度来看,管理起来要简单得多。

关于java - 嵌入 Tomcat 并向部署的应用程序发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2093457/

相关文章:

java - 使用 Tomcat 和 Eclipse IDE 时 Hibernate 和 Jersey 发生冲突

linux - 301 所有 404 到主页

java - Tomcat 上的 j_security_check

php - PHP 中的测试驱动开发

ruby-on-rails - RSpec 对页面上的元素抛出误报

java - Java问题中的正则表达式

Java Swing : Select specefic row of Jtable after filtering data

java - 如何创建类似 GMail.app 的菜单

testing - TDD/BDD 积极影响统计

java - 实现一个包含 3 个字符串值的链表