java 启动 jetty_java – 为JAR文件启动嵌入式jetty服务器

我想要做的是构建一个包含我的项目的可执行JAR文件.我已经将它的依赖项包含在它旁边,也在JAR文件中,所以我的目录列表看起来像这样:

~/Projects/Java/web-app/out:

web-app.jar

dependency1.jar

dependency2.jar

dependency3.jar

我知道并确信我的问题不是来自依赖关系,因为我的应用程序正常运行,直到我启动Jetty嵌入式的那一刻.

我用来启动Jetty的代码是这样的:

public class ServerExecutionGoal implements ExecutionGoal {

private final static Logger logger = Logger.getLogger(ServerExecutionGoal.class);

private WebAppContext getWebAppContext() throws IOException {

WebAppContext context = new WebAppContext();

System.out.println("context = " + context);

context.setResourceBase(new PathMatchingResourcePatternResolver().getResource("classpath:/webapp").getURL().toExternalForm());

context.setContextPath("/");

context.setLogger(new StdErrLog());

return context;

}

@Override

public void execute(Map stringObjectMap) throws ExecutionTargetFailureException {

logger.info("Instantiating target server ...");

final Server server = new Server(8089);

final ContextHandlerCollection handlerCollection = new ContextHandlerCollection();

try {

handlerCollection.setHandlers(new Handler[]{new RequestLogHandler(),getWebAppContext()});

} catch (IOException e) {

throw new ExecutionTargetFailureException("Could not create web application context",e);

}

server.setHandler(handlerCollection);

try {

logger.info("Starting server on port 8089 ...");

server.start();

server.join();

logger.info("Server started. Waiting for requests.");

} catch (Exception e) {

throw new ExecutionTargetFailureException("Failed to properly start the web server",e);

}

}

public static void main(String[] args) throws ExecutionTargetFailureException {

new ServerExecutionGoal().execute(null);

}

}

我可以验证“webapp”文件夹是否在我的JAR中正确地重新定位到/ webapp,以及通过我的IDE(IntelliJ IDEA 11)上下文运行代码.setResourceBase(new PathMatchingResourcePatternResolver().getResource(“classpath:/ webapp”) ).getURL().toExternalForm())有效地映射到相关资源.此外,我可以证明它解决了类似于:

jar:file:~/Projects/Java/web-app/out/web-app.jar!/webapp

并且可以访问(我读过它).

但是,当我启动应用程序的main方法,Jetty启动时,在http:// localhost:8089上,我得到以下内容:

HTTP ERROR: 503

Problem accessing /. Reason:

06002

Powered by Jetty://

我哪里错了?

我知道通过将“resourceBase”设置为“.”地址“http:// localhost:8089”将充当“〜/ Projects / Java / web-app / out /”位置的接口,在那里我可以看到所有JAR文件的列表,包括“web- app.jar“,点击我提供下载它.

我看过以下问题,答案不适用:

> Embedded jetty application not working from jar:我从Start.class.getProtectionDomain()获取NullPointerException.getCodeSource()解析为null.

> Embedded Jetty WebAppContext FilePermission issue:这不仅没有得到回答,但情况显然不适用,因为我没有许可问题(我可以获得文件列表的事实应证明这一点).

> embedding jetty server problems:也没有答案,也不适用,因为我没有任何依赖性问题(正如我在上面的评论中所指出的那样).

我认为我应该以某种方式启用Jetty访问/ webapp文件夹,该文件夹位于我的src / main / resources /目录下并捆绑到我的Web应用程序中.我是否应该放弃捆绑的Web应用程序并将爆炸的上下文路径部署到Jetty可访问的某个地方(这根本不可取,因为它给我和我的客户带来了很多问题).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的框架,用于构建独立的、可执行的Spring应用程序。在使用Spring Boot构建的应用程序中,可以使用以下步骤启动应用程序。 1. 创建一个Spring Boot项目:首先,需要创建一个基于Spring Boot的Maven或Gradle项目。可以使用Spring Initializr来生成项目的基本结构和依赖关系。 2. 配置应用程序:在项目中,可以使用application.properties或application.yml文件来配置应用程序的属性,如数据库连接、服务器端口等。 3. 编写应用程序代码:编写应用程序的主要业务逻辑,包括控制器、服务、存储库等。Spring Boot提供了大量的自动配置功能,可以简化开发过程。 4. 构建应用程序:使用Maven或Gradle构建项目,生成可执行的jar文件。 5. 启动应用程序:使用java命令或者使用IDE中的运行按钮来启动应用程序。执行命令java -jar your-app.jar启动应用程序。 6. 应用程序初始化:当应用程序启动时,Spring Boot会执行一些初始化操作,例如扫描注解、创建Bean、配置日志等。 7. 自动配置:Spring Boot根据应用程序的配置和依赖关系自动配置应用程序,例如数据库连接、Web服务器等。 8. 创建服务器:Spring Boot会创建一个嵌入服务器,例如Tomcat或Jetty,用于处理HTTP请求。 9. 处理请求:当收到HTTP请求时,服务器会将请求转发给相应的控制器类,并执行相应的处理方法。 10. 返回响应:控制器方法处理完请求后,会将处理结果封装为HTTP响应,并返回给客户端。 总之,Spring Boot的启动流程可以简单概括为创建项目、配置应用程序、编写代码、构建项目、启动应用程序、初始化应用程序、自动配置应用程序、创建服务器、处理请求和返回响应。通过这个流程,可以快速开发并部署基于Spring Boot的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值