我想制作一些指向我的码头设置中另一个端点的自定义端点。例如,我已经拥有像http://myserver.com/app这样的端点来提供帮助页面。此外,如果我传递某些参数,我会得到不同的页面。例如,http://myserver.com/app?app_id=56可能会投放一个应用,http://myserver.com/app?app_id=48可能会提供一个记录功能的静态html页面。
为了某些用户,我想为一些常用的应用设置简单的端点。因此,如果用户转到http://myserver.com/docs,他们应该看到与http://myserver.com/app?app_id=48相同的内容。
我一直在尝试使用.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>
使用这个配置文件转到/ docs服务上面提到的帮助页面,我通常会加载http://myserver.com/app,我的挂断是我无法弄清楚如何传递相应的app_id。
我想我最终可能会创建某种自定义处理程序,但我并不完全确定如何实现它。
只是为了使问题复杂化,我还希望能够将一些任意参数传递给我的端点并将其传递给它。因此http://myserver.com/docs?foo=bar会显示http://myserver.com/app?app_id=48&foo=bar。
我应该采用另一种方式,还是可以通过config xml文件完成?
答案 0 :(得分:0)
如果使用Jetty 9.2+,您可以使用内置的静态资源服务(deploy
模块提供的魔法)
例如:
$ 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
但是如果你真的想用XML处理静态资源......
ContextHandler
和ResourceHandler
它们仅用于最简单和天真的文件服务方案。WebAppContext
resourceBase
设置为文档所在的目录以下是如何设置提供XML的静态文件(完成右侧)
$ 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