1

データのバックエンド サーバーに HTTP 要求を行う Grails アプリケーションがあります。そのサーバーはメンテナンスのためにダウンすることができ、その場合、HTTP 応答で「サイトダウン」メッセージが Grails アプリに返されます。Grails アプリはこれを検出し、カスタム SiteDownException をスローします。URLMappings.groovy では、これは特定のエラー ページに送られます。

これは、AJAX リクエストとは別にうまく機能します。発生しているように見えるのは、「サイト ダウン」URL マッピングが (予想どおり) トリガーされ、その後にキャッチ オール '500' マッピングが続くということです。

URLMappings.groovy

"500"(controller: "error", action: "siteDown", exception: SiteDownException)
"500"(controller: "error", action: "error500") 

ErrorController.groovy

def siteDown() {
println ">>>> site down <<<<"
}

def error500() {
println ">>>> 500 <<<<"
}

を使用してエラーがスローされます

throw new SiteDownException()

通常のリクエストの場合、スタックトレースは...

[11/11/13 16:52:50.945 error] SiteDownException occurred when processing request: [POST] /portal/contact/detail - parameters:
fileKeyIdentifier: 
mode: add
Stacktrace follows: [org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver  http-bio-8080-exec-6]
com.ui.exceptions.SiteDownException
    at com.ui.backend.Backend$$EOMu30qx.getResponse(Backend.groovy:118)
    at com.ui.backend.Backend$$EOMu30qx.getResponseAsDomainObject(Backend.groovy:41)
    at com.ui.contact.ContactService.detail(ContactService.groovy:166)
    at com.ui.contact.ContactController.detail(ContactController.groovy:87)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
>>>> site down <<<<

スポットですが、AJAX リクエストの場合は...

    [11/11/13 16:54:09.380 error] SiteDownException occurred when processing request: [POST] /portal/contact/searchBody
Stacktrace follows: [org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver  http-bio-8080-exec-7]
com.ui.exceptions.SiteDownException
    at com.ui.backend.Backend$$EOMu30qx.getResponse(Backend.groovy:118)
    at com.ui.backend.Backend$$EOMu30qx.getResponseAsDomainObject(Backend.groovy:41)
    at com.ui.contact.ContactService.searchBody(ContactService.groovy:55)
    at com.ui.contact.ContactController.searchBody(ContactController.groovy:23)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
>>>> site down <<<<
>>>> 500 <<<<

最後のビットが重要です。これは、siteDown アクションからの「サイト ダウン」メッセージと、すべてのエラーをキャッチするアクションからの「500」を表示します。

AJAX エラーに対して両方のマッピングが呼び出される理由を説明できる人はいますか? ありがとう

4

1 に答える 1

0

問題が見つかりました。jQuery AJAX ラッパーでエラー トラップが発生しました。

error: function(XMLHttpRequest,textStatus,errorThrown){
     window.location.href = config.contextPath + '/error/error500'; // Error - show the 500 error page
}

そのため、SiteDownException が SiteDown マッピングを正しく起動し、AJAX エラー ハンドラが error500 マッピングを起動していました。

于 2013-11-12T10:29:27.150 に答える