使用Jetty运行.war文件

4

我正在努力创建最基本的Jetty应用程序和同时启动.war包的示例。我找到的所有内容都只是说将.war放在"$JETTY_HOME/webapps"中,但我不确定如何验证"$JETTY_HOME"是什么。我正在尝试扩展在https://github.com/heroku/java-getting-started.git找到的简单的heroku默认应用程序。我的目录结构:

src/
-- main/
---- java/
------ Main.java
target/
-- (lots of stuff in here)
pom.xml
Procfile
webapps/
-- workbench.war

我使用 java -cp target/classes:target/dependency/* Main 命令来运行我的应用。

Main.java 文件与这个文件完全相同: https://raw.githubusercontent.com/heroku/java-getting-started/master/src/main/java/Main.java.

我该如何运行 .war 文件呢?每当我访问 localhost:5000/workbench 时,只会看到“Hello World”,而不是应该在 workbench.war 中包含的 Workbench 应用程序。


那个例子根本没有使用war文件,而是直接使用Servlet定义。 - Joakim Erdfelt
我想扩展这个“示例”,使其可以同时执行两个功能。 - Larry Price
“上下文(context)”指的是Web应用程序中的范畴,您需要将所有内容置于该范畴内,否则就会形成不同的上下文。在决定要做什么时请记住这一点。自动构建的war上下文及其描述符自动加载与一些手动servlet混合比较困难(但并非不可能)。 - Joakim Erdfelt
2个回答

1

1

如果仅涉及单个战争,请执行此操作。

package org.eclipse.jetty.demo;

import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.plus.webapp.EnvConfiguration;
import org.eclipse.jetty.plus.webapp.PlusConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.FragmentConfiguration;
import org.eclipse.jetty.webapp.JettyWebXmlConfiguration;
import org.eclipse.jetty.webapp.MetaInfConfiguration;
import org.eclipse.jetty.webapp.TagLibConfiguration;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.webapp.WebInfConfiguration;
import org.eclipse.jetty.webapp.WebXmlConfiguration;

public class EmbedMe
{
    public static void main(String[] args) throws Exception
    {
        int port = 8080;
        Server server = new Server(port);

        String warpath = "webapps/workbench.war";

        WebAppContext context = new WebAppContext();
        context.setResourceBase(warpath);
        context.setConfigurations(new Configuration[]
        { 
            new AnnotationConfiguration(), 
            new WebInfConfiguration(), 
            new WebXmlConfiguration(), 
            new MetaInfConfiguration(), 
            new FragmentConfiguration(),
            new EnvConfiguration(), 
            new PlusConfiguration(), 
            new JettyWebXmlConfiguration() 
        });

        context.setContextPath("/");
        context.setParentLoaderPriority(true);
        server.setHandler(context);
        server.start();
        server.join();
    }
}

这看起来很有前途 - 这会允许我运行 war 并监听其他路由吗? - Larry Price

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