`
benni82
  • 浏览: 123136 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jetty&tomcat对待表单过长问题

阅读更多

结论两句话:

 

tomcat知道自己处理不了了,什么也不干过去了

jett知道自己处理不了了,抛个IllegalStateException出来通知一下

jetty默认允许的content-length=200×1000

org.eclipse.jetty.server.Request
public void extractParameters()
    {
        if (_baseParameters == null) 
            _baseParameters = new MultiMap(16);
        
        if (_paramsExtracted) 
        {
            if (_parameters==null)
                _parameters=_baseParameters;
            return;
        }
        
        _paramsExtracted = true;
....
        // handle any _content.
        String encoding = getCharacterEncoding();
        String content_type = getContentType();
        if (content_type != null && content_type.length() > 0)
        {
            content_type = HttpFields.valueParameters(content_type, null);
            
            if (MimeTypes.FORM_ENCODED.equalsIgnoreCase(content_type) &&
                    (HttpMethods.POST.equals(getMethod()) || HttpMethods.PUT.equals(getMethod())))
            {
                int content_length = getContentLength();
                if (content_length != 0)
                {
                    try
                    {
                        int maxFormContentSize=-1;
                        
                        if (_context!=null)
                            maxFormContentSize=_context.getContextHandler().getMaxFormContentSize();
                        else
                        {
                            Integer size = (Integer)_connection.getConnector().getServer().getAttribute("org.eclipse.jetty.server.Request.maxFormContentSize");
                            if (size!=null)
                                maxFormContentSize =size.intValue();
                        }
                        
                        if (content_length>maxFormContentSize && maxFormContentSize > 0)
                        {
                            throw new IllegalStateException("Form too large"+content_length+">"+maxFormContentSize);
                        }
                        InputStream in = getInputStream();
                       
                        // Add form params to query params
                        UrlEncoded.decodeTo(in, _baseParameters, encoding,content_length<0?maxFormContentSize:-1);
                    }
                    catch (IOException e)
                    {
                        if (Log.isDebugEnabled())
                            Log.warn(e);
                        else
                            Log.warn(e.toString());
                    }
                }
            }
        }
....
        }   
    }

 

jetty修改content-length方法

 

<Configure id="Server" class="org.eclipse.jetty.server.Server">
...
<Call name="setAttribute">
  <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
  <Arg><SystemProperty name="org.eclipse.jetty.server.Request.maxFormContentSize" default="200000"/></Arg>
 </Call>
...
</Configure>

启动方式

 

java -jar start.jar -Dorg.eclipse.jetty.server.Request.maxFormContentSize=600000

还有另外一种配置方式

 

<Call class="java.lang.System" name="setProperty">
        <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
        <Arg>400000</Arg>
</Call>
 

tomcat默认允许的content-length=2×1024×1024

org.apache.catalina.connector.Request
protected void parseParameters() {
......
    if (!("application/x-www-form-urlencoded".equals(contentType)))
        return;
    int len = getContentLength(); 
    if (len > 0) {
        int maxPostSize = connector.getMaxPostSize();   // tomcat默认大小2*1024*1024  
        if ((maxPostSize > 0) && (len > maxPostSize)) {
            if (context.getLogger().isDebugEnabled()) {
                context.getLogger().debug(
                        sm.getString("coyoteRequest.postTooLarge"));
            }
            return;   // 内容超长则直接返回,jetty会抛出IllegalStateException
            //Parameters 对象没有内容
    }
.....
}

public Map<String, String[]> getParameterMap() {
    if (parameterMap.isLocked())
        return parameterMap;
    Enumeration<String> enumeration = getParameterNames();
    while (enumeration.hasMoreElements()) {
        String name = enumeration.nextElement();
        String[] values = getParameterValues(name);
        parameterMap.put(name, values);
    }
    parameterMap.setLocked(true);
    return parameterMap;
}

public Enumeration<String> getParameterNames() {
    if (!parametersParsed)
        parseParameters();
    return coyoteRequest.getParameters().getParameterNames();
}
分享到:
评论

相关推荐

    jetty-distribution-9.4.31.v20200723_安装包.rar

    为了替代Tomcat,只需将应用程序的WAR文件放入Jetty的webapps目录下,Jetty会自动检测并部署应用。 总的来说,Jetty是一个强大且灵活的Web服务器,特别适合用于开发和测试环境,以及对性能和资源管理有严格要求的...

    springmvc+mysql+mybatis+jetty+maven+easyui

    相比于Tomcat,Jetty启动更快,占用资源更少,适合小型项目或集成到其他Java应用中。在本项目中,Jetty作为应用服务器运行Spring MVC应用,处理HTTP请求并返回响应。 5. **Maven**:Maven是Apache软件基金会开发的...

    4_Tomcat笔记.pdf

    Tomcat笔记主要涵盖了如何访问网页、服务器分类、Tomcat的安装与使用、可能出现的问题以及项目部署等相关内容。 首先,网页的访问方式有两种:本地访问和服务器访问。本地访问简单直接,但若需共享给其他用户,需...

    台和web简单demo 3,表单提交 form get

    而"平台"在这里可能指的是Web应用程序的运行环境,如Tomcat、Jetty或Apache HTTP Server等。这些平台提供了运行Java Servlets和JavaServer Pages(JSP)的能力,使得开发者可以使用Java语言构建动态、交互式的Web...

    网站开发之MyEclipse简单实现JSP网页表单提交及传递值1

    确保你的MyEclipse已经配置了正确的服务器,如Tomcat或Jetty,以便正确地部署和运行JSP页面。 总结来说,本教程介绍了如何使用MyEclipse创建Web服务工程,编写JSP页面,构建HTML表单,以及通过Java脚本获取表单提交...

    jsp中文问题解决方案(完整版)

    - J2EE容器:Tomcat、Jetty或WebLogic等,每个容器的默认编码设置可能有所差异。 - 数据库:MySQL、Oracle、SQL Server或DB2,它们对字符集的支持情况各异。 - JDBC驱动:不同的驱动对编码处理可能存在区别。 - ...

    commons-fileupload所有版本(1.0-1.3).zip

    可能还添加了对其他类型的HTTP客户端库的支持,比如Jetty或Tomcat。此外,可能还修复了一些与不同Java版本或Web容器兼容性有关的问题。 1.3版本: 作为最新版本,1.3可能包含了一些重要的改进,如增强的性能、安全...

    OA办公系统 Springboot vue.js前后分离,Flowable工作流自定义表单

    Springboot内嵌了Tomcat、Jetty或Undertow等Servlet容器,使得开发者无需部署WAR文件即可运行Spring应用程序。 2. Vue.js:Vue.js是一个构建用户界面的前端JavaScript框架。它允许开发者通过简单的模板语法来声明式...

    Servlet与表单

    常见的应用服务器包括Tomcat、Jetty等。Servlet的部署通常涉及到以下步骤: 1. **编写Servlet代码**:实现`Servlet`接口或继承`HttpServlet`。 2. **配置web.xml文件**:在项目的`WEB-INF`目录下,通过`web.xml`...

    java服务器server.zip

    5. **服务器框架**:熟悉至少一种Java服务器框架,如Jetty或Tomcat的使用和配置。 6. **安全性**:理解文件上传下载的安全风险,如防止文件覆盖、恶意文件上传以及文件权限控制。 为了进一步深入,开发者可能还需要...

    java验证码组件Jcaptcha

    3. **易于集成**:Jcaptcha提供Java API,可以方便地集成到各种Java Web应用中,支持Servlet容器,如Tomcat、Jetty等。 4. **高性能**:Jcaptcha设计时考虑了性能问题,能够在高并发环境下快速生成验证码,不影响...

    Blog0821.zip

    3. **Jetty或Tomcat服务器的上传组件**:一些Web服务器如Jetty和Tomcat可能包含内置的文件上传处理机制,这些组件可能也需要特定的jar包。 4. **JSF (JavaServer Faces)**:如果项目使用JSF作为前端框架,那么可能...

    jeecg-framework-3.1.0.RELEASE

    简介 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台,...Web容器测试通过的有Jetty和Tomcat6 待推出功能:分布式部署,云计算,移动平台开发,规则引擎,代码生成器(eclipse插件) 要求JDK1.6+

    spring-boot入门helloword

    它的核心特性是可以内嵌Servlet容器,如Tomcat或Jetty,这样就无需额外的服务器配置即可运行Java应用。在这个“spring-boot入门helloworld”教程中,我们将探讨如何使用Spring Boot创建一个简单的“Hello, World!”...

    struts文件上传大小限制问题

    在处理文件上传功能时,Struts框架会涉及到文件大小的限制,以防止恶意用户上传过大的文件导致服务器资源耗尽。本篇文章将详细探讨Struts文件上传大小限制的问题。 首先,我们需要理解文件上传的基本流程。在Struts...

    servle的第一个例子.docx

    - **运行环境**:Web项目必须部署在Web容器中(如Tomcat、Jetty等),而普通Java应用可以直接在JVM上运行。 2. **了解Tomcat的配置方式** - **Tomcat配置方式**主要包括以下几种: - **server.xml**:位于`conf...

    Jsp文件上传助手 JspUpload Beta 1.0

    1. **配置环境**:确保你的应用程序服务器(如Tomcat、Jetty等)已安装并配置好Java环境,同时项目中包含Servlet库,因为文件上传通常涉及到Servlet接口。 2. **添加依赖**:将`JspUpload Beta 1.0`相关的jar文件...

    http-exposer

    多部分表单数据和 Tomcat 7 Bioko 依赖于 Guice Servlet。 Guice Servlet 使用 javax 来拦截请求并将 servlet 对象的创建委托给注入器。 默认情况下,Tomcat 不支持过滤器中的 。 要启用它,war 应包含文件WEB-INF...

    一些登录页面

    在开发基于Jetty的登录页面时,Eclipse可以帮助编写和管理Java代码,配置Web项目,并通过内置的Tomcat或Jetty插件进行快速启动和调试。 5. **安全实践**:在设计登录页面时,必须考虑安全性,包括密码加密存储、...

    ssm+bootstrap+jquery实例

    5. 将项目部署到Tomcat或其他Servlet容器中,或者使用内置的Jetty或Tomcat插件运行。 6. 访问博客地址https://blog.csdn.net/u014627099/article/details/85040765,跟随教程进行详细步骤,以理解每个部分的工作原理...

Global site tag (gtag.js) - Google Analytics