- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Gradle 构建了一个多项目,格式如下:
project1
--build.gradle
--settings.gradle
project2
--src
----main
------java
--------LocalJettyRunner.java
------webapp
--------static
----------index.html
当我运行 LocalJettyRunner
并加载 localhost:8135
时,当我期望 ResourceHandler
返回 Index.html 时,我收到 404 。我已经调试了 ResourceHandler.handle(...)
方法,它似乎在我的 project1/static
目录中查找,但该目录显然不存在。我做错了什么?
LocalJettyRunner
public class LocalJettyRunner {}
public void start() throws Exception {
log.info("Starting api");
ResourceHandler webHandler = new ResourceHandler();
webHandler.setDirectoriesListed(true);
webHandler.setResourceBase("static/");
webHandler.setWelcomeFiles(new String[]{"index.html"});
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(webHandler);
Server server = new Server(8135);
server.setHandler(handlers);
server.start();
}
public static void main(String[] args) throws Exception {
new LocalJettyRunner().start();
}
}
最佳答案
ResourceBase 是绝对路径和/或绝对路径的 URL。
它在没有绝对路径的情况下也能工作,这是因为 new File(String).toAbsolutePath()
的工作原理。
尝试通过 ClassPath 查找 ResourceBase 中已知的资源,然后使用 URL 引用设置绝对路径。
示例:
假设你有一个src/main/resources/webroot/
,里面有你的静态内容(例如index.html
),那么你可以先解析它,然后将其传递到基础资源中。
package jetty.resource;
import java.net.URI;
import java.net.URL;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.util.resource.Resource;
public class ResourceHandlerExample
{
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
// Figure out what path to serve content from
ClassLoader cl = ResourceHandlerExample.class.getClassLoader();
// We look for a file, as ClassLoader.getResource() is not
// designed to look for directories (we resolve the directory later)
URL f = cl.getResource("webroot/index.html");
if (f == null)
{
throw new RuntimeException("Unable to find resource directory");
}
// Resolve file to directory
URI webRootUri = f.toURI().resolve("./").normalize();
System.err.println("WebRoot is " + webRootUri);
ResourceHandler handler = new ResourceHandler();
handler.setBaseResource(Resource.newResource(webRootUri));
server.setHandler(handler);
server.start();
server.join();
}
}
顺便说一句,您有一个src/main/webapp/
,它往往指示 Maven 的正确 webapp/war 文件。对于一个完整的 Web 应用程序,跳过 ResourceHandler
并直接使用 WebAppContext
可能会更容易(它将所有内容连接起来,并且不使用 ResourceHandler
,而是 DefaultServlet
,它更适合提供静态文件)
关于java - 多项目 gradle 构建中的 Jetty ResourceHandler 看起来在错误的目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080315/
在没有指定上下文和上下文处理程序的情况下启动 jetty 实例是否正确,然后在服务器启动后继续向其添加上下文。尽管我能够使用可变 HandlerCollection 执行此操作并且日志显示服务器和上下
在没有指定上下文和上下文处理程序的情况下启动 jetty 实例是否正确,然后在服务器启动后继续向其添加上下文。尽管我能够使用可变 HandlerCollection 执行此操作并且日志显示服务器和上下
我正在尝试让 Jetty 在我的 Ubuntu 上自动启动。 我已经完成了这些命令: cp /opt/jetty/bin/jetty.sh /etc/init.d update-rc.d jett
我是 Jetty 和客户端/服务器架构的新手。 我设法在 Eclipse 中编写了一个 jetty 服务器,它可以工作。 但是我怎样才能停止 jetty 服务器呢?我听说过 stop.jar 和 st
我已经使用Jetty / tomcat应用服务器使用Spring Web应用程序工作了大约两年了,但是让我感到困惑的是如何在这些服务器中处理多个请求。我知道 Spring 有助于单例,但我的理解仅限于
我正在尝试使用 jetty 来使用 maven 托管一个简单的 helloworld servlet。我很困惑。 我关注了这些 instructions ,但是当我发出 mvn jetty:run ,
我正在使用 Jetty 9,我有 jetty.base 和 jetty.home,我想知道我什么时候启动 jetty,它以什么样的顺序调用 jetty.base 和 jetty.home,我的意思是一
我有一个 Ubuntu 服务器 10.10 64 位 在 上运行 Web 应用程序 jetty 6.1.24-6 在 Sun 的 JVM ,两者都是从标准 Ubuntu 存储库安装的。 我正在尝试查找
我在集成测试中使用 ShrinkWrap 启动 Jetty 服务器。 问题: 当我启动我的测试 jetty 服务器而不是制作我的 Controller 模型时 - 模型不起作用! 我认为原因是不同的类
使用Gradle帮助运行Jetty 9 我已经看到了在how-to-run-jetty-7-with-specified-war-with-groovy-gradle和setting_up_embed
我正在将一个项目打包到 docker jetty 镜像中,并且我正在尝试访问日志,但没有访问日志。 文件 FROM jetty:9.2.10 MAINTAINER Me "me@me.com" ADD
有没有办法解决jetty引起的文件锁定问题?完全来自 gradle ? 一些澄清: 使用 Gradle Jetty plugin 时通过运行 gradle jettyRun, jetty 导致静态资源
我最近才开始使用 Java(我最近的大部分经验都在 .NET 中)。作为这项工作的一部分,我一直在对 Jetty 和 Tomcat 进行一些比较。 我认为在我们的环境中 Tomcat 的一个功能是内置
我已将 Jetty 嵌入到 Java 应用程序中,并在 Jetty 服务器对象的实例上调用 start() 方法(在设置描述静态和动态 Web 内容位置的处理程序列表之后)。 start() 调用会阻
我正在使用 Jetty 部署生产网站。假设我的网站是 foo.com 当我将浏览器指向一个不存在的上下文(比如 foo.com/notavailable)时,Jetty 会显示一个错误页面,其中包含部
我想使用 Jetty 的嵌入式版本创建一个应用程序。不幸的是,我找不到有关我需要这样做的 jar 文件的任何信息。 Maven 存储库中有几个( http://repo2.maven.org/mave
This answer explains how the server version header can be completely removed通过使用 HttpConfiguration.s
有人可以告诉我DispatcherType在做什么吗? 似乎是重要的配置。 指向ServletContextHandler#addFilter之类的东西对类的使用也没有帮助,对我来说,“ aa”是明智
我正在尝试使用jetty gradle插件运行Jetty服务器进行功能测试。但是,我得到了java.lang.IllegalArgumentException: Object is not of ty
我需要在gradle构建中创建多种不同的模式来运行 jetty 。 它们的系统属性和类路径不同。 如何使用Gradle Jetty插件进行操作? 最佳答案 您可以创建JettyRun类型的多个任务。要
我是一名优秀的程序员,十分优秀!