0

JSP でエラー処理を試しているときに、奇妙な動作に気付きました。

  • Myobject を作成しますが、テスト用に nullpointer を発生させるものは何も入れません。

  • ページに errorPage ディレクティブを含めたので、この例外が発生したときにエラーページに移動する必要があります。

実際のエラーは、フォームの入力で発生します。

....
 <input type="hidden" id="INITIAL_ACTION" name="INITIAL_ACTION" value="<%=Myobject.myMethod()%>"/>
<input type="hidden" name="INITIAL_PAGE" ....

errorpage ディレクティブは機能しているので、errorpage のコンテンツが表示されますが、ページは正常に見えません。ページのソースを見ると、前のページのこの INITIAL_ACTION 入力の値に実際にはエラーページが転送されているのではなく挿入されているように見えます。

...
        <input id="INITIAL_ACTION" type="hidden" value=" <html> <head> <title>ErrorPage</title> <link rel = 'stylesheet' type = 'text/css' href = '../css/newstyle.css' /> </head> <body> <div id=" name="INITIAL_ACTION"></input>
        <table class="borderedtable">

            <tbody>
                <tr> … </tr>
                <tr> … </tr>
    ...

もちろん、これにより、実際のエラーページでいくつかのレイアウト/cssの問題が発生しています。誰かがこの動作を説明したり、私を正しい方向に向けたりできますか?

編集 :

ページバッファを増やすとうまくいきます。

しかし、現在のアプリケーションでは、エラー処理が機能することを確認するためにこれが必要なページを特定するのは困難です。

問題は、エラー ページの最初の DIV の id 属性の最初の二重引用符が、それが挿入された場所の値属性を閉じるために使用されていたことです。

エラーページの上部に、二重引用符と説明を含む html コメントを追加しました。これで、その引用符が使用され、ページの残りの部分が正常に表示されます。

しかし、私は自分のソリューションがあまり好きではなく、しっかりしているとは感じません

4

1 に答える 1

0

Apache Tomcat、または Jasper (Tomcat の JSP エンジン) またはその派生物を使用する他の JSP コンテナーの 1 つを使用していると思います。

エラーが発生したときに応答が既にコミットされている場合、Jasper はエラー ページに転送するのではなく、エラー ページを含めます。

エラー ページに転送するには、応答がコミットされる前に、エラーをトリガーするアクションを実行する必要があります。これを行うには、次の方法が考えられます。

  • ページ バッファのサイズを増やして、応答が後でコミットされるようにします。
  • ページをリファクタリングして、エラーをトリガーするコードが先に実行されるようにする
于 2014-03-17T14:38:47.513 に答える