gpt4 book ai didi

java - 与 Spark Framework 一起使用时,如何配置 Jetty 以允许更大的表单

转载 作者:行者123 更新时间:2023-11-30 06:04:36 25 4
gpt4 key购买 nike

如何通过 Spark framework 配置 Jetty 选项?

当我提交一个大表格时,我遇到了以下问题。 Jetty 的解决方案记录在 Form too Large Exception

但是 Jetty 对我使用 Spark Framework 是隐藏的,我该如何配置来解决这个问题。

    org.eclipse.jetty.http.BadMessageException: 400: Unable to parse form content
at org.eclipse.jetty.server.Request.getParameters(Request.java:373)
at org.eclipse.jetty.server.Request.getParameter(Request.java:1016)
at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:194)
at spark.Request.queryParams(Request.java:283)
at spark.http.matching.RequestWrapper.queryParams(RequestWrapper.java:141)
at com.jthink.songkong.server.callback.ServerEditSongs.startTask(ServerEditSongs.java:45)
at com.jthink.songkong.server.CmdRemote.lambda$null$62(CmdRemote.java:171)
at spark.RouteImpl$1.handle(RouteImpl.java:72)
at spark.http.matching.Routes.execute(Routes.java:61)
at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1568)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:564)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:59
1)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Form too large: 273433 > 200000
at org.eclipse.jetty.server.Request.extractFormParameters(Request.java:516)
at org.eclipse.jetty.server.Request.extractContentParameters(Request.java:454)
at org.eclipse.jetty.server.Request.getParameters(Request.java:369)
... 26 more

最佳答案

一些历史:

  • 我稍微查了一下 spark 的 git 仓库,发现这个问题是在 2015 年 8 月 3 日提出的,这里 issue 314

  • Perwendel(维护 Spark 的人)在 2016 年 10 月 11 日添加了 Much wanted 标签

  • 然后于 2016 年 11 月 3 日开始研究

  • 他合并了 Pull Request PR #813为嵌入式 Spark 中的任何 Jetty 设置开辟了可能性。

我查看了此 PR 中添加的修改,我认为您可以通过实现 JettyServerFactory 来配置一些东西, 如果你覆盖 public Server create(...) 方法,你可以返回你的自定义服务器:

public class Main {

public static void main(String ...args) {
CustomJettyServerFactory customJettyServerFactory = new CustomJettyServerFactory();
EmbeddedServers.add(
EmbeddedServers.Identifiers.JETTY,
new EmbeddedJettyFactory(customJettyServerFactory));
}
}

class CustomJettyServerFactory implements JettyServerFactory {
@Override
public Server create(int maxThreads, int minThreads, int threadTimeoutMillis) {
Server server = new Server();
server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", 1000000);
return server;
}

@Override
public Server create(ThreadPool threadPool) {
return null;
}
}

请试一试,看看您是否可以完成这项工作,我没有任何设置可以尝试,但我认为这是配置 Jetty 服务器的正确路径。

关于java - 与 Spark Framework 一起使用时,如何配置 Jetty 以允许更大的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49054092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com