2014-04-10 28 views
4

我正在嘗試維護一個使用Java 7和Jetty 9.1.3獨立使用嵌入式碼頭運行的Java Web應用程序。除了其中一個JSP頁面中的所有鏈接之外,所有內容都將運行。該頁面上的每個鏈接都應該獲取png文件或文本文件並將其顯示在鏈接下。當通過Netbeans的運行,點擊後各個環節只是掛和控制檯提供了以下錯誤:Webapp與嵌入式碼頭給予異常

Apr 10, 2014 4:23:34 PM org.apache.struts.chain.commands.AbstractExceptionHandler execute 
WARNING: Unhandled exception 
java.lang.IllegalStateException: Form too many keys 
at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:526) 
at org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:625) 
at org.eclipse.jetty.server.Request.extractParameters(Request.java:344) 
at org.eclipse.jetty.server.Request.getParameterNames(Request.java:852) 
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:426) 
at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50) 
at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60) 
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:711) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:462) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) 
at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 
at java.lang.Thread.run(Thread.java:744) 

Apr 10, 2014 4:23:34 PM org.apache.struts.chain.commands.ExceptionCatcher postprocess 
WARNING: Exception from exceptionCommand 'servlet-exception' 
java.lang.IllegalStateException: Form too many keys 
at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:526) 
at org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:625) 
at org.eclipse.jetty.server.Request.extractParameters(Request.java:344) 
at org.eclipse.jetty.server.Request.getParameterNames(Request.java:852) 
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:426) 
at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50) 
at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60) 
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:711) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:462) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) 
at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 
at java.lang.Thread.run(Thread.java:744) 

2014-04-10 16:23:34.438:WARN:oejs.ServletHandler:qtp2008751570-30: 
javax.servlet.ServletException: java.lang.IllegalStateException: Form too many keys 
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:711) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:462) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) 
at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 
at java.lang.Thread.run(Thread.java:744) 
Caused by: 
java.lang.IllegalStateException: Form too many keys 
at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:526) 
at org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:625) 
at org.eclipse.jetty.server.Request.extractParameters(Request.java:344) 
at org.eclipse.jetty.server.Request.getParameterNames(Request.java:852) 
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:426) 
at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50) 
at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60) 
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:711) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:462) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) 
at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 
at java.lang.Thread.run(Thread.java:744) 

我做了一些研究,發現這往往(或總是)是關係到形式存在大默認碼頭參數。建議修復的方法是通過創建名爲jetty-web.xml的xml文件並將其放入web/WEB-INF文件夾來覆蓋默認值。這是我的新創建碼頭-web.xml中:

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE Configure PUBLIC 
"-//Eclipse//DTD Configure//EN" 
"http://jetty.eclipse.org/configure.dtd"> 

<Configure id="WebAppContext" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="maxFormContentSize">600000</Set> 
    <Set name="maxFormKeys">20000</Set> 
</Configure> 

我重建了Web應用程序與此文件後,並沒有解決問題。我曾嘗試使用較大的數字,但似乎沒有效果。我對碼頭不熟悉,甚至不熟悉嵌入式碼頭與Java進行交互的底層方式,知道下一步要嘗試什麼。

我會很高興發佈任何代碼,從有問題的JSP頁面或處理請求的支持Java代碼,但我想現在可能控制檯錯誤就夠了。非常感謝您的幫助。

+0

嘗試-Dorg.eclipse.jetty.server.Request.maxFormKeys = 2000在JVM參數 –

+0

工作!非常感謝。任何想法爲什麼jetty-web.xml方法不起作用? –

+0

我記得似乎有一個記錄在這個版本中沒有起作用的bug。我不記得它是哪個版本...... :) –

回答

8

嘗試

-Dorg.eclipse.jetty.server.Request.maxFormKeys = 2000

在JVM參數

0

的碼頭9.2 可以配置一個形式限制sinlge web應用程序。 在這種情況下,上下文處理器(或webappContext)實例必須使用以下方法來配置:嵌入碼頭時

ContextHandler.setMaxFormContentSize(int maxSizeInBytes); 
ContextHandler.setMaxFormKeys(int formKeys);  

這些方法可以直接調用,但更常見的是從上下文XML文件或配置WEB- INF /碼頭-web.xml文件:

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 

    ... 

    <Set name="maxFormContentSize">200000</Set> 
    <Set name="maxFormKeys">2000</Set> 
</Configure>  

您可以爲服務器

配置形式限制如果上下文沒有配置特定形式的限制,那麼服務器的屬性進行檢查,看是否有服務器寬限制已設置在大小或密鑰上。以下XML展示瞭如何將這些屬性可以的jetty.xml設置:

<configure class="org.eclipse.jetty.server.Server"> 

    ... 

    <Call name="setAttribute"> 
    <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg> 
    <Arg>100000</Arg> 
    </Call> 
    <Call name="setAttribute"> 
    <Arg>org.eclipse.jetty.server.Request.maxFormKeys</Arg> 
    <Arg>2000</Arg> 
    </Call> 
</configure>