Jetty错误: badMessage: java.lang.IllegalStateException: too much data after closed for [email protected]{r=2,c=false,a=IDLE,uri=}

最近用Jetty跑Spring MVC接收POST请求(POST中数据很大)。出现数据无法获取到的问题。如:

@RequestMapping(value = "/receive", method = RequestMethod.POST)
public receive(String a,String b,String c) 

其中a是从POST中获取,先前数据量小的时候,可以取到没有问题。

用抓包工具看,发现POST数据没发完就HTTP就返回了。这点很奇怪

调大下面的参数值:

      <Set name="outputBufferSize"><Property name="jetty.output.buffer.size" default="32768" /></Set>
      <Set name="requestHeaderSize"><Property name="jetty.request.header.size" default="8192" /></Set>
      <Set name="responseHeaderSize"><Property name="jetty.response.header.size" default="8192" /></Set>
      <Set name="headerCacheSize">512</Set>

改了很大,10倍的增加,结果too much  data不报了,可是依然还是取不到要的参数。调得很大还有内存溢出,还得调小其他参数,如线程数。

改变方式修改Content-Type为 application/x-www-form-urlencoded 或multipart/form-data,一样没有效果。

试过多种方式后,使用@RequestBody注解了a,结果,成功了。而且不需要调整jetty的参数。

为什么用@RequestBody?

@RequestBody 

作用:

  1. 该注解用于读取Request请求的Body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
  2. 再把HttpMessageConverter返回的对象数据绑定到Controller中方法的参数上。

使用时机:

A) GET、POST方式提时, 根据Request Header Content-Type的值来判断:

  • application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
  • multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
  • 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据Request Header Content-Type的值来判断:

  • application/x-www-form-urlencoded, 必须;
  • multipart/form-data, 不能处理;
  • 其他格式, 必须;

说明:Request的Body部分的数据编码格式由Header部分的Content-Type指定;

参考:

http://blog.csdn.net/arsenal04/article/details/41484685(以上内容转自此篇文章,先记录一下先,待解决)

https://stackoverflow.com/questions/29527803/eliminating-or-understanding-jetty-9s-illegalstateexception-too-much-data-aft

原文地址:https://www.cnblogs.com/EasonJim/p/8295811.html

时间: 2024-07-28 20:29:28

Jetty错误: badMessage: java.lang.IllegalStateException: too much data after closed for [email protected]{r=2,c=false,a=IDLE,uri=}的相关文章

常见错误之java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s cont。。。

如果在logcat日志中出现以下错误: java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 4 Pager id: com.activity_test.logo:id/viewpag

使用printWrite 在jetty中报错 java.lang.IllegalStateException: STREAM

1 public void doFilter(ServletRequest request, ServletResponse response, 2 FilterChain chain) throws IOException, ServletException { 3 // TODO Auto-generated method stub 4 HttpServletRequest req=(HttpServletRequest)request; 5 HttpServletResponse res=

java.lang.IllegalStateException: attempt to re-open an already-closed object

最后,我还是通过单例模式和"短时间内不关闭SQLiteDatabase"解决了问题. 在自定义的DbHelper类(大部分人定义为DatabaseHelper)中: public static synchronized DbHelper getInstance(Context context){ if(dbInstance == null){ dbInstance = new DbHelper(context.getApplicationContext()); } return dbI

android异常java.lang.IllegalStateException: getDatabase called recursively问题

问题场景: 在app首次启动使用到db的时候,后台提示如下错误信息 java.lang.IllegalStateException: getDatabase called recursively at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:204) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase

java.lang.IllegalStateException: Zip File is closed

最近在研究利用sax读取excel大文件时,出现了以下的错误: java.lang.IllegalStateException: Zip File is closed at org.apache.poi.openxml4j.util.ZipFileZipEntrySource.getEntries(ZipFileZipEntrySource.java:45) at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.ja

java.lang.IllegalStateException: Failed to load ApplicationContext(2)

错误提示:java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext.xml]: Error sett

java lang IllegalStateException The maximum number of cell

1.错误描述 java.lang.IllegalStateException: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook at org.apache.poi.hssf.usermodel.HSSFWorkbook.createCellStyle(HSSFWorkbook.java:1215) at report.utils.ExportSt

Jetty提交数据时报java.lang.IllegalStateException: Form too large270468&gt;200000问题解决

今天在使用Eclipse的Jetty插件做为服务器提交富文本编辑中的数据时,报如下异常: java.lang.IllegalStateException: Form too large270468>200000 at org.mortbay.jetty.Request.extractParameters(Request.java:1561) at org.mortbay.jetty.Request.getParameterMap(Request.java:870) at org.apache.s

java.lang.IllegalStateException:Web app root system property already set to different value 错误原因及解决 Log4j

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口 服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 其实呢,我觉得他就是一个能对我们的WEB应用监控的组件,让我们可以了解到我们的程序运行的情况 ,以及出错后