使用jetty contextHandler传递参数

使用jetty contextHandler传递参数,jetty,Jetty,我想在jetty设置中创建一些指向另一个端点的自定义端点。例如,我已经有了这样的端点,它提供了一个帮助页面。此外,如果我传递某些参数,我会得到不同的页面。例如,可以服务于一个应用程序,也可以服务于一个记录功能的静态html页面 为了一些用户,我想为一些常用的应用程序设置简单的端点。因此,如果用户访问,他们将看到与相同的内容 我一直试图通过.xml配置文件来实现这一点。到目前为止,我已经几乎成功了 <?xml version="1.0" encoding="ISO-8859-1"?>

我想在jetty设置中创建一些指向另一个端点的自定义端点。例如,我已经有了这样的端点,它提供了一个帮助页面。此外,如果我传递某些参数,我会得到不同的页面。例如,可以服务于一个应用程序,也可以服务于一个记录功能的静态html页面

为了一些用户,我想为一些常用的应用程序设置简单的端点。因此,如果用户访问,他们将看到与相同的内容

我一直试图通过.xml配置文件来实现这一点。到目前为止,我已经几乎成功了

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.eclipse.org/configure.dtd">

<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
  <Set name="contextPath">/docs</Set>
  <Set name="resourceBase">http://localhost:8080</Set>
  <Set name="handler">
    <New class="org.eclipse.jetty.server.handler.ResourceHandler">
      <Set name="welcomeFiles">
        <Array type="String">
          <Item>app</Item>
        </Array>
      </Set>
      <Set name="cacheControl">max-age=3600,public</Set>
    </New>
  </Set>
</Configure>

/文件
http://localhost:8080
,我的问题是我不知道如何传递相应的应用程序id

我想我最终可能会创建某种自定义处理程序,但我不确定如何实现它

使问题复杂化的是,我还希望能够将一些任意参数传递给我的端点,并将其传递。我也会展示


我应该以另一种方式来实现这一点,还是可以通过配置xml文件来实现这一切?

如果使用Jetty 9.2+,您可以使用内置的静态资源服务(由部署模块提供的魔法)

例如:

但是如果您真的想用XML处理静态资源

  • 不要使用
    ContextHandler
    ResourceHandler
    它们只适用于最简单和最幼稚的文件服务场景
  • 使用匿名
    WebAppContext
  • resourceBase
    设置为文档所在的目录
下面是如何设置服务于XML的静态文件(正确完成)

$cd/path/to/my.base
$cat webapps/docs.xml
/文件
/opt/my/docs
/etc/docs-web.xml
$cat etc/docs-web.xml
违约
org.eclipse.jetty.servlet.DefaultServlet
别名
假的
接受范围
真的
肮脏的
真的
欢迎光临
假的
欢迎光临
假的
最大缓存大小
256000000
maxCachedFileSize
200000000
maxCachedFiles
2048
gzip
假的
埃塔格
假的
useFileMappedBuffer
真的
缓存控制
最大年龄=3600岁,公共
0
违约
/
index.html
index.htm
$java-jar/path/to/jetty dist/start.jar

谢谢,我试试看。
$ cd /path/to/my.base
$ ls -l webapps
total 4
lrwxrwxrwx. 1 joakim joakim 84 Oct 27 17:24 docs -> /opt/my/docs
$ java -jar /path/to/jetty-dist/start.jar
$ cd /path/to/my.base
$ cat webapps/docs.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/docs</Set>
  <Set name="resourceBase">/opt/my/docs</Set>
  <Set name="defaultsDescriptor"><Property name="jetty.base" default="."/>/etc/docs-web.xml</Set>
</Configure>

$ cat etc/docs-web.xml 
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
   xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
   metadata-complete="false"
   version="3.1">

  <servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
    <init-param>
      <param-name>aliases</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>acceptRanges</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>dirAllowed</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>welcomeServlets</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>redirectWelcome</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>maxCacheSize</param-name>
      <param-value>256000000</param-value>
    </init-param>
    <init-param>
      <param-name>maxCachedFileSize</param-name>
      <param-value>200000000</param-value>
    </init-param>
    <init-param>
      <param-name>maxCachedFiles</param-name>
      <param-value>2048</param-value>
    </init-param>
    <init-param>
      <param-name>gzip</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>etags</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>useFileMappedBuffer</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>cacheControl</param-name>
      <param-value>max-age=3600,public</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>
</web-app>
$ java -jar /path/to/jetty-dist/start.jar