我们从某处文件系统,但是外面的web应用程序的提供静态文件的简单问题苦苦挣扎,但我们不能让它运行。服务与码头静态文件karaf(外束)
有关于如何做到这一点的例子服务器,但他们都不工作,到目前为止,我们无法找到一个人,它实际上没有工作的确认。
,因为它是陈述 这里 https://ops4j1.jira.com/wiki/display/paxweb/Advanced+Jetty+Configuration 或这里 ops4j GitHub sample
所以加入的jetty.xml这在etc目录中找到的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>
With两个版本的jetty/karaf启动正常,当karaf关闭时,我可以看到
2015-06-02 12:02:57,838 | INFO | pool-7-thread-2 | ContextHandler
| org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 |停止oejsServletContextHandler {/文件服务器,文件:/用户/共享/ testenv /}
但文件没有下本地主机服务:8181 /文件服务器
它是工作(在新安装的唯一途径卡拉夫容器)是使用
<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>
但是,这样做,将打破其他网络应用程序运行在卡拉夫。例如,我们使用Camel Servlet组件。
所以确实有人通过服务例如码头在karaf或静态文件现在如何做到这一点的工作配置?
任何帮助表示赞赏。预先感谢!
顺便说一句:使用Karaf 3.0.3
编辑:
我重新运行阿奇姆给出并启用DEBUG洛片断测试。
采用WordPress 15:33:25492 | 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 {/静态内容,NULL} .setHandler([email protected]) 2015年6月3日15:33:25529 | DEBUG | pool-6-thread-1 |货柜
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 |容器o.e.j.s.h.ContextHandler {/ static-content,null} + [email protected] as handler 2015-06-03 15:33:25,529 | DEBUG | pool-6-thread-1 |货柜
| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 |容器 org.op[email protected]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 |启动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 |启动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 |服务器
| 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,1 = 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 |匹配 [/ static-content] ... 2015-06-03 15:34:27,975 | DEBUG | /static-content | ServerModel | 78 - org.ops4j.pax.web.pax-web-spi - 3.1.4 |路径[/静态内容]确实 不匹配任何上下文2015-06-03 15:34:27,975 | DEBUG | /static-content |服务器| 71 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | 响应/静态内容200处理=虚假
在这里,我注意到得到版本(不工作),并设置版本(工作)之间的差异。
设置设置类org.eclipse.jetty.server.handler.HandlerList
get获取,并添加到类org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection
,被描述为
码头处理程序的集合,只调用处理器(=上下文)是 执行后请求路径匹配基于字符串匹配的请求路径的 到注册别名
莫不是关于别名有问题吗?
编辑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的多个系统上试过了。
我再次检查并在上述问题中提出了一些更多的细节。感谢您查看这个。 – Florian
Achim与Karaf 3.0.5,只是将此片段添加到jetty.xml中并不适用于我。我刚刚公布了我作为这个问题的答案所采取的确切步骤(请参阅上文)。 –