if (!foundCookie) {
logger.info("cooookies Not found --- ");
ResourceBundle appName = ResourceBundle.getBundle(
"conf/filename", Locale.getDefault());
Enumeration bundleKeys = appName.getKeys();
Cookie[] cookieToBeAdded = new Cookie[9000];
int i =0 ;
while (bundleKeys.hasMoreElements()) {
logger.error((String) bundleKeys.nextElement());
String key = (String) bundleKeys.nextElement();
String value = appName.getString(key);
cookieToBeAdded[i] = new Cookie(("station" + i),(key+":"+ value));
cookieToBeAdded[i].setMaxAge(24*60*60);
logger.error(cookieToBeAdded[i]+"cookieToBeAdded[i]");
// logger.info("cooookies adding to response --- " + cookieToBeAdded[i].getName() + ":" + cookieToBeAdded[i].getValue());
response.addCookie(cookieToBeAdded[i]);
pw.write("<Source>");
pw.write("<name>"+value+"</name>");
pw.write("<id>"+key+"</id>");
pw.write("</Source>");
i++;
}
}
我正在尝试运行上面的代码,我收到以下错误:
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at org.apache.coyote.http11.InternalOutputBuffer.write(InternalOutputBuffer.java:680)
at org.apache.coyote.http11.InternalOutputBuffer.sendStatus(InternalOutputBuffer.java:419)
at org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1588)
at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:934)
at org.apache.coyote.Response.action(Response.java:183)
at org.apache.coyote.Response.sendHeaders(Response.java:379)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305)
at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:273)
at org.apache.catalina.connector.Response.finishResponse(Response.java:486)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:636)
当我尝试捕获此异常时,它不会进入catch循环。 我在cookie中添加了大约8999个值。 饼干大小有限制吗?
我正在使用JBoss,这是用servlet(Java)编写的。
请帮帮忙?
答案 0 :(得分:2)
看起来tomcat有一个你遇到的行或标题大小限制。
真正的问题是为什么你要尝试使用这么多的cookie。如果每个用户有大量信息,将其存储在会话或服务器端数据库中 - 请不要强制它在每次请求时通过网络发送。
答案 1 :(得分:0)
看起来这个异常发生在你的servlet代码返回之后,并且Tomcat正在创建响应消息。 (这解释了为什么你无法捕获异常,以及为什么你在堆栈跟踪中看不到任何方法。)
然而,异常发生在一个最奇怪的地方。看起来write
方法试图将数据复制到消息缓冲区的末尾。但是在编写状态行时会发生这种情况;即响应的第一行。我能想到的唯一解释是
我认为解决方案是增加Tomcat的回复缓冲区大小,或者减小标题的大小。
答案 2 :(得分:0)
我不知道任何特定服务器实现的任何限制,但是浏览器基于浏览器的cookie的大小和数量有明确的限制,当然它取决于浏览器供应商和浏览器的版本