- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在努力解决从文件系统中某处但在 Web 应用程序外部提供静态文件的简单问题,但我们无法让它运行。
有很多关于如何执行此操作的示例,但它们似乎都不起作用,而且到目前为止,我们找不到任何人确认它确实有效。
在 etc 目录中找到的 jetty.xml 已经按照说明进行了编辑这里 https://ops4j1.jira.com/wiki/display/paxweb/Advanced+Jetty+Configuration或者在这里 ops4j GitHub sample
所以添加到 jetty.xml 中:
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/fileserver</Set>
<Set name="resourceBase">/Users/Shared/testenv</Set>
<Call name="addServlet">
<Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
<Arg>/</Arg>
</Call>
</New>
</Arg>
</Call>
</Get>
或者这个:
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/fileserver</Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="resourceBase">/Users/Shared/testenv</Set>
<Set name="directoriesListed">true</Set>
</New>
</Set>
</New>
</Arg>
</Call>
</Get>
对于两个版本的 jetty/karaf 都可以正常启动,当 karaf 关闭时我可以看到
2015-06-02 12:02:57,838 | INFO | pool-7-thread-2 | ContextHandler
| 113 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | stopped o.e.j.s.ServletContextHandler{/fileserver,file:/Users/Shared/testenv/}
但文件不在 localhost:8181/fileserver 下提供
它工作的唯一方法(在新安装的 karaf 容器中)是使用
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.HandlerList">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/fileserver</Set>
<Set name="resourceBase">/Users/Shared/testenv</Set>
<Call name="addServlet">
<Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
<Arg>/</Arg>
</Call>
</New>
</Item>
</Array>
</Set>
</New>
</Set>
但是这样做会破坏在 karaf 中运行的其他 Web 应用程序。例如,我们正在使用 Camel Servlet 组件。
那么有人有通过 karaf 中的 jetty 实例提供静态文件的工作配置或者现在如何做到这一点?
感谢任何帮助。提前致谢!
顺便说一下:使用 Karaf 3.0.3
编辑:
我使用 Achim 提供的代码片段重新运行测试并启用 DEBUG 登录。
2015-06-03 15:33:25,492 | DEBUG | pool-6-thread-1 | XmlConfiguration | 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | XML o.e.j.s.h.ContextHandler{/,null}.setContextPath(/static-content) 2015-06-03 15:33:25,527 | DEBUG | pool-6-thread-1 | XmlConfiguration | 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | XML o.e.j.s.h.ContextHandler{/static-content,null}.setHandler(org.eclipse.jetty.server.handler.ResourceHandler@3855ace4) 2015-06-03 15:33:25,529 | DEBUG | pool-6-thread-1 | Container
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | Container o.e.j.s.h.ContextHandler{/static-content,null} + org.eclipse.jetty.server.handler.ResourceHandler@3855ace4 as handler 2015-06-03 15:33:25,529 | DEBUG | pool-6-thread-1 | Container
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | Container org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection@6665534e + o.e.j.s.h.ContextHandler{/static-content,null} as handler 2015-06-03 15:33:25,542 | DEBUG | pool-6-thread-1 | AbstractLifeCycle
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | starting o.e.j.s.h.ContextHandler{/static-content,null} 2015-06-03 15:33:25,542 | DEBUG | pool-6-thread-1 | AbstractHandler
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | starting o.e.j.s.h.ContextHandler{/static-content,null} 2015-06-03 15:33:25,543 | DEBUG | pool-6-thread-1 | AbstractLifeCycle
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | STARTED o.e.j.s.h.ContextHandler{/static-content,null} 2015-06-03 15:34:27,974 | DEBUG | /static-content | Server
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | REQUEST /static-content on AsyncHttpConnection@638f2d20,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=10,c=0},r=1 2015-06-03 15:34:27,974 | DEBUG | /static-content | ServerModel
| 78 - org.ops4j.pax.web.pax-web-spi - 3.1.4 | Matching [/static-content]... 2015-06-03 15:34:27,975 | DEBUG | /static-content | ServerModel | 78 - org.ops4j.pax.web.pax-web-spi - 3.1.4 | Path [/static-content] does not match any context 2015-06-03 15:34:27,975 | DEBUG | /static-content | Server | 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | RESPONSE /static-content 200 handled=false
在这里我注意到获取版本(不工作)和设置版本(工作)之间的区别。
Set 设置类 org.eclipse.jetty.server.handler.HandlerList
Get获取并添加到类org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection
中,描述为
Jetty Handler collection that calls only the handler (=context) that matches the request path after performing the substring based matching of requests path to registered aliases
别名会不会有问题?
编辑 2:
我试着深入研究这个,但我真的无法让它发挥作用。我不知道集成测试和常规 karaf 之间的区别,但肯定有问题。要重现该问题,只需使用一个新的 karaf (3.0.3) 容器,执行 feature:install war
并将代码片段添加到 etc/jetty.xml 中,使其看起来像这样并编辑路径resourceBase 以便它匹配本地路径。
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//
DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.eclipse.jetty.server.Server">
<!-- =========================================================== -->
<!-- Set connectors -->
<!-- =========================================================== -->
<!-- One of each type! -->
<!-- =========================================================== -->
<!-- Use this connector for many frequently idle connections and for
threadless continuations. -->
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host">
<Property name="jetty.host" />
</Set>
<Set name="port">
<Property name="jetty.port" default="8181" />
</Set>
<Set name="maxIdleTime">300000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
<!-- =========================================================== -->
<!-- Configure Authentication Realms -->
<!-- Realms may be configured for the entire server here, or -->
<!-- they can be configured for a specific web app in a context -->
<!-- configuration (see $(jetty.home)/contexts/test.xml for an -->
<!-- example). -->
<!-- =========================================================== -->
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
<Set name="name">karaf</Set>
<Set name="loginModuleName">karaf</Set>
<Set name="roleClassNames">
<Array type="java.lang.String">
<Item>org.apache.karaf.jaas.boot.principal.RolePrincipal
</Item>
</Array>
</Set>
</New>
</Arg>
</Call>
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
<Set name="name">default</Set>
<Set name="loginModuleName">karaf</Set>
<Set name="roleClassNames">
<Array type="java.lang.String">
<Item>org.apache.karaf.jaas.boot.principal.RolePrincipal
</Item>
</Array>
</Set>
</New>
</Arg>
</Call>
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/static-content</Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="resourceBase">/Users/Shared/testenv/in</Set>
<Set name="directoriesListed">true</Set>
</New>
</Set>
</New>
</Arg>
</Call>
</Get>
</Configure>
尝试使用 localhost:8181/static-content 通过浏览器访问上下文。
结果始终为 404 - 未找到。
我们已经在运行 linux 和 windows 的多个系统上进行了尝试。
最佳答案
问题可能与 pax-web 版本有关。在 Karaf 3.0.5 中,它使用我读过的版本 Pax-web 3.2.6(抱歉,我找不到链接)有一个与服务静态内容相关的错误。
我已经在 Karaf 4.0.3 (Pax-web 4.2.3) 中测试了@Achim 的方法,它非常有效。
关于jetty - 在 karaf 中使用 jetty 服务静态文件(在 bundle 之外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30593547/
在没有指定上下文和上下文处理程序的情况下启动 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类型的多个任务。要
我是一名优秀的程序员,十分优秀!