Adr*_*ght 8 coldfusion post http coldfusion-10
Coldfusion 10允许为POST请求参数的最大数量设置限制(服务器设置/设置/请求大小限制/ POST请求参数的最大数量).默认限制为100.
是否可以在超出此限制时进行陷阱,以便可以使用自定义处理程序进行处理? 如果有,怎么样?
我试图在Application.cfc中使用站点范围的错误处理程序和onError()方法来捕获它.两次尝试都没有成功.
谢谢你的期待.
我可以确认你看到的行为.我认为在调用Application.cfc之前,CF servlet会抛出异常,这可以解释为什么onError永远不会触发.
到目前为止,这工作对我来说唯一的选择就是加入了自定义错误页中WEB-INF\web.xml,使用HTTP状态代码:
<error-page>
<error-code>400</error-code>
<location>/path/to/myErrorPage.cfm</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
注意:从评论中,@ Adrian提到他将上面的内容添加到了\cfusion\runtime\conf\web.xml,而不是中web-inf\.
更新1:
进一步阅读建议您还可以更精细地配置事物.要处理特定类型的异常,请使用<exception-type>而不是<error-code>.例如:
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/path/to/myErrorPage.cfm</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
也就是说,在我的(简短)测试中,CF10似乎对此错误使用非常一般的异常类.这两者都有很多潜在的原因,而不仅仅是发布了太多的表单字段.所以记住这一点.虽然它比处理所有HTTP 500错误更集中,但它可能仍然包含其他原因.
Run Code Online (Sandbox Code Playgroud)javax.servlet.ServletException: ROOT CAUSE: java.lang.IllegalStateException: Cannot call sendError() ..
更新2:
原来这javax.servlet.ServletException只是一只红鲱鱼.正如@AdrianWright在评论中指出的那样,该错误与调试设置有关.当CF生成"最大POST请求参数数"消息时,它没有正确地考虑调试,这反过来导致一个新的异常:java.lang.IllegalStateException.因此HTTP 500错误:
当禁用调试时(因为它将在生产系统上),CF只是将错误消息直接写入响应流并返回HTTP状态代码400.由于没有抛出异常,<exception-type>因此这里没用.所以你很难使用状态代码:
<error-page>
<error-code>400</error-code>
<location>/path/to/myErrorPage.cfm</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
但是,在自定义错误页面上,您可以从请求流中提取错误消息.然后相应地处理它:
<cfset req = getPageContext().getRequest()>
<cfset message = req.getAttribute("javax.servlet.error.message")>
<cfif message contains "POST parameters exceeds">
Too many form fields. do something...
<cfelse>
Some other cause. do something else
</cfif>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |