JFinal修改Jetty MaxFormContentSize参数

囧Code 发布于 2014/05/05 12:59
阅读 2K+
收藏 0

@JFinal 你好,想跟你请教个问题:JFinal运行中出现java.lang.IllegalStateException: Form too large270468>200000查了下资料,说是Jetty的maxformContentSize参数错了。根据网上的说明添加了jetty-web.xml文件,运行时,Jfinal直接报Object of class 'org.eclipse.jetty.webapp.WebAppContext' is not Type of class'org.eclipse.jetty.webapp.WebAppContext'。请问,该如何解决,谢谢了。

附修改方法:http://blog.csdn.net/shixing_11/article/details/6996236

加载中
2
囧Code
囧Code

谢谢@純白陰影的提示,用jd-gui查看了源碼,將參數改成-Dorg.eclipse.jetty.server.Request.maxFormContentSize=-1完美解決改問題。

純白陰影
純白陰影
额,jetty迁到eclipse.org下了,参数名也变了~ 总之这个是通过Integer.getInteger方法去获取一个SysProp来指定这个值
0
純白陰影
純白陰影
直接加JVM参数 -Dorg.mortbay.http.HttpRequest.maxFormContentSize=-1
純白陰影
純白陰影
回复 @囧Code : 求最佳答案 ~.~
純白陰影
純白陰影
可能不同版本参数名称不同
囧Code
囧Code
刚测试过,没有效果,依然报错。根据网上的换成Dorg.mortbay.jetty.Request.maxFormContentSize还是不行
0
嗨丶赵哥
嗨丶赵哥
重写com.jfinal.server.JettyServer
doStart 方法 
添加webApp.setMaxFormContentSize(-1);
fmpoffice
fmpoffice
回复 @小赵哥 : 谢谢,我解决了!我把JettyServer.class官方原生的类复制了一份放到项目中直接修改了,按照您的方法实现了!比用xml的方案要好,用xml重修编译会报错!
嗨丶赵哥
嗨丶赵哥
回复 @fmpoffice : 源码就改了一句 webApp.setMaxFormContentSize("false"); 改为 webApp.setMaxFormContentSize(-1); // "false"));
嗨丶赵哥
嗨丶赵哥
回复 @fmpoffice : 我是直接新建了一个同包同名的类。直接盖了他的。
fmpoffice
fmpoffice
回复 @小赵哥 : 老大哥,能不能贴一下完整代码啊?我弄一个类继承了jettyServer,也重写了他的start方法,但看了JFinal的源码,感觉还得重写JFinal启动JettyServer的方法。是需要这样实现吗?还有没有更加简洁的方法?
嗨丶赵哥
嗨丶赵哥
回复 @fmpoffice : 特指嵌入式jetty服务。
下一页
0
fmpoffice
fmpoffice

不是继承,纯粹就是复制一份项目中的代码来实现!


0
sn1
sn1

如果嫌修改类麻烦的话,直接反射调用一次配置即可,在JFinal.me().getServletContext()提供了访问通道

 

@Override
    public void afterJFinalStart() {
        super.afterJFinalStart(); 
        if(JFinal.me().getServletContext().getClass().getName().equals("org.eclipse.jetty.webapp.WebAppContext$Context")){
            try {
                ServletContext ctx = JFinal.me().getServletContext();
                Method getContextHandler = ctx.getClass().getMethod("getContextHandler", null);
                Object handler = getContextHandler.invoke(ctx, null);
                Method setMax = handler.getClass().getMethod("setMaxFormContentSize", int.class);
                setMax.invoke(handler, 350 * 1024);
            } catch (Exception e) { 
                e.printStackTrace();
            }
        }
        
    }

 

返回顶部
顶部