2013-06-19 40 views
2

我使用Jetty 9運行SolR。它工作正常。如何使用Jetty在動態內容上啓用Gzip壓縮9

我有以下配置:1個Web服務器(IIS),1個Solr的服務器(碼頭)。

爲了優化帶寬的使用,我想使本2個服務器之間GZIP壓縮。

我試圖加入到這個jetty/etc/webdefault.xml

<filter> 
    <filter-name>GzipFilter</filter-name> 
    <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> 
    <init-param> 
     <param-name>mimeTypes</param-name> 
     <param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,application/json,image/svg+xml</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>GzipFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

我得到以下錯誤:

2013-06-19 11:16:19.534:WARN:oejuc.AbstractLifeCycle:main: FAILED GzipFilter: javax.servlet.UnavailableException: org.eclipse.jetty.servlets.GzipFilter 
javax.servlet.UnavailableException: org.eclipse.jetty.servlets.GzipFilter 
    at org.eclipse.jetty.servlet.Holder.doStart(Holder.java:108) 
    at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:91) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:743) 
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:279) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1312) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:722) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:490) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:274) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:193) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.updateBeans(ContainerLifeCycle.java:713) 
    at org.eclipse.jetty.server.handler.HandlerCollection.setHandlers(HandlerCollection.java:89) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.setHandlers(ContextHandlerCollection.java:165) 
    at org.eclipse.jetty.server.handler.HandlerCollection.addHandler(HandlerCollection.java:155) 
    at org.eclipse.jetty.deploy.bindings.StandardDeployer.processBinding(StandardDeployer.java:41) 
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186) 
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:495) 
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:175) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64) 
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:600) 
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528) 
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391) 
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:145) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:557) 
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:232) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:108) 
    at org.eclipse.jetty.server.Server.start(Server.java:346) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:90) 
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:294) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1233) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1160) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:453) 
    at org.eclipse.jetty.start.Main.start(Main.java:595) 
    at org.eclipse.jetty.start.Main.main(Main.java:96) 
2013-06-19 11:16:19.534:WARN:oejw.WebAppContext:main: Failed startup of context [email protected]{/,file:/E:/Solr/jetty-9/webapps/ROOT/,STARTING}{E:\Solr\jetty-9\webapps\ROOT} 
javax.servlet.UnavailableException: org.eclipse.jetty.servlets.GzipFilter 
    at org.eclipse.jetty.servlet.Holder.doStart(Holder.java:108) 
    at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:91) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:743) 
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:279) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1312) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:722) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:490) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:274) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:193) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.updateBeans(ContainerLifeCycle.java:713) 
    at org.eclipse.jetty.server.handler.HandlerCollection.setHandlers(HandlerCollection.java:89) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.setHandlers(ContextHandlerCollection.java:165) 
    at org.eclipse.jetty.server.handler.HandlerCollection.addHandler(HandlerCollection.java:155) 
    at org.eclipse.jetty.deploy.bindings.StandardDeployer.processBinding(StandardDeployer.java:41) 
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186) 
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:495) 
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:175) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64) 
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:600) 
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528) 
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391) 
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:145) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:557) 
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:232) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:108) 
    at org.eclipse.jetty.server.Server.start(Server.java:346) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:90) 
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:294) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1233) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1160) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:453) 
    at org.eclipse.jetty.start.Main.start(Main.java:595) 
    at org.eclipse.jetty.start.Main.main(Main.java:96) 

人有一個想法?

回答

8

通常,您將GzipFilter添加到您的Web應用程序的WEB-INF/web.xml,並將jetty-servlets.jar包含在您的WEB-INF/lib目錄中。

然而,有可能把它在頂層碼頭服務器級別配置。

對於初學者來說,你所得到的錯誤指示碼頭 - servlets.jar不存在於您的服務器類路徑。

要測試此操作,請從您的jetty-distribution獨立版運行以下代碼。

$ java -jar start.jar --version 

Active Options: [Server, annotations, client, ext, jaas, jmx, jndi, jndi.demo, jsp, plus, resources, rewrite, websocket] 
Version Information on 36 entries in the classpath. 
Note: order presented here is how they would appear on the classpath. 
     changes to the OPTIONS=[option,option,...] command line option will be reflected here. 
0:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-xml-9.0.3.v20130506.jar 
1: 3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar 
2:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-http-9.0.3.v20130506.jar 
3:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-continuation-9.0.3.v20130506.jar 
4:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-server-9.0.3.v20130506.jar 
5:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-security-9.0.3.v20130506.jar 
6:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-servlet-9.0.3.v20130506.jar 
7:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-webapp-9.0.3.v20130506.jar 
8:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-deploy-9.0.3.v20130506.jar 
9:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-annotations-9.0.3.v20130506.jar 
10: 1.1.0.v201108011116 | ${jetty.home}/lib/annotations/javax.annotation-1.1.0.v201108011116.jar 
11: 3.1.0.v200803061910 | ${jetty.home}/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar 
12:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-client-9.0.3.v20130506.jar 
13:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-jaas-9.0.3.v20130506.jar 
14:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-jmx-9.0.3.v20130506.jar 
15:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-jndi-9.0.3.v20130506.jar 
16:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-plus-9.0.3.v20130506.jar 
17: 1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar 
18: 1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar 
19:    1.1.1 | ${jetty.home}/lib/jndi/javax.transaction-1.1.1.v201105210645.jar 
20:  9.0.3.v20130506 | ${jetty.home}/lib/jndi.demo/test-mock-resources-9.0.3.v20130506.jar 
21: 2.2.0.v201303151357 | ${jetty.home}/lib/jsp/com.sun.el-2.2.0.v201303151357.jar 
22: 2.2.0.v201303151357 | ${jetty.home}/lib/jsp/javax.el-2.2.0.v201303151357.jar 
23: 1.2.0.v201105211821 | ${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar 
24: 2.2.0.v201112011158 | ${jetty.home}/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar 
25: 2.2.2.v201112011158 | ${jetty.home}/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar 
26: 1.2.0.v201112081803 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar 
27: 3.8.2.v20130121-145325 | ${jetty.home}/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar 
28:    (dir) | ${jetty.home}/resources 
29:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-rewrite-9.0.3.v20130506.jar 
30:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-api-9.0.3.v20130506.jar 
31:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-common-9.0.3.v20130506.jar 
32:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-server-9.0.3.v20130506.jar 
33:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-servlet-9.0.3.v20130506.jar 
34:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-util-9.0.3.v20130506.jar 
35:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-io-9.0.3.v20130506.jar 

這將顯示您的服務器類路徑中,你可以看到,標準的分佈沒有jetty-servlets.jar默認情況下可用。然而列入start.jarstart.config有一個預定義OPTIONservlets

注意:要查看的OPTIONS列表,運行

$ java -jar start.jar --list-options 

需要注意的是:若要看到start.jar使用start.config

$ java -jar start.jar --list-config 

最後,使用這些信息,我們可以簡單地通過編輯start.ini使可在碼頭的每一次啓動servletsOPTION

$ echo "OPTIONS=servlets" >> start.ini 

$ java -jar start.jar --version 
Active Options: [Server, annotations, client, ext, jaas, jmx, jndi, jndi.demo, jsp, plus, resources, rewrite, servlets, websocket] 
Version Information on 37 entries in the classpath. 
Note: order presented here is how they would appear on the classpath. 
     changes to the OPTIONS=[option,option,...] command line option will be reflected here. 
0:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-xml-9.0.3.v20130506.jar 
1: 3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar 
2:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-http-9.0.3.v20130506.jar 
3:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-continuation-9.0.3.v20130506.jar 
4:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-server-9.0.3.v20130506.jar 
5:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-security-9.0.3.v20130506.jar 
6:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-servlet-9.0.3.v20130506.jar 
7:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-webapp-9.0.3.v20130506.jar 
8:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-deploy-9.0.3.v20130506.jar 
9:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-annotations-9.0.3.v20130506.jar 
10: 1.1.0.v201108011116 | ${jetty.home}/lib/annotations/javax.annotation-1.1.0.v201108011116.jar 
11: 3.1.0.v200803061910 | ${jetty.home}/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar 
12:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-client-9.0.3.v20130506.jar 
13:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-jaas-9.0.3.v20130506.jar 
14:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-jmx-9.0.3.v20130506.jar 
15:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-jndi-9.0.3.v20130506.jar 
16:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-plus-9.0.3.v20130506.jar 
17: 1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar 
18: 1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar 
19:    1.1.1 | ${jetty.home}/lib/jndi/javax.transaction-1.1.1.v201105210645.jar 
20:  9.0.3.v20130506 | ${jetty.home}/lib/jndi.demo/test-mock-resources-9.0.3.v20130506.jar 
21: 2.2.0.v201303151357 | ${jetty.home}/lib/jsp/com.sun.el-2.2.0.v201303151357.jar 
22: 2.2.0.v201303151357 | ${jetty.home}/lib/jsp/javax.el-2.2.0.v201303151357.jar 
23: 1.2.0.v201105211821 | ${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar 
24: 2.2.0.v201112011158 | ${jetty.home}/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar 
25: 2.2.2.v201112011158 | ${jetty.home}/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar 
26: 1.2.0.v201112081803 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar 
27: 3.8.2.v20130121-145325 | ${jetty.home}/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar 
28:    (dir) | ${jetty.home}/resources 
29:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-rewrite-9.0.3.v20130506.jar 
30:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-servlets-9.0.3.v20130506.jar 
31:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-api-9.0.3.v20130506.jar 
32:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-common-9.0.3.v20130506.jar 
33:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-server-9.0.3.v20130506.jar 
34:  9.0.3.v20130506 | ${jetty.home}/lib/websocket/websocket-servlet-9.0.3.v20130506.jar 
35:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-util-9.0.3.v20130506.jar 
36:  9.0.3.v20130506 | ${jetty.home}/lib/jetty-io-9.0.3.v20130506.jar 

此時你可以看到jetty-servlets.jar現在在服務器端可用。 (在我進入輸出30#以上)

+0

嗨。 謝謝你的回答,非常詳細。知道,我明白它是如何工作的。 jetty-servlets.jar現在已成功加載,並且沒有例外。 但我仍然有一個問題:我嘗試請求SolR(POST請求,使用Accept-Encoding:gzip,deflate)但響應沒有被壓縮。我嘗試將application/xml添加到webdefault.xml中,但它不起作用(我使用Fiddler)。 你有任何想法如何調試它? 非常感謝 – heisenberg

+0

@heisenberg我有同樣的問題 - 最終爲你做了這個工作嗎?即使GET請求,GZIP也不適用於我。我已經在override-web.xml中設置了過濾器。 – IceMan

+0

@IceMan只是將它添加到override-web.xml對於jetty或您的webapp來說並不足以使用它。您可部署的上下文還應引用override-web.xml作爲其覆蓋。 –

0

爲尋找爲什麼POST請求沒有壓縮的答案;默認情況下,只有GET請求被過濾器壓縮。添加

<init-param> 
     <param-name>methods</param-name> 
     <param-value>GET,POST</param-value> 
    </init-param> 

壓縮POST。