4

Websphere Application Server (WAS) 7 からバージョン 8.5 に移行する予定です。WAS 7 で正常に動作するアプリケーションをデプロイしましたが、移行以降、アプリケーションに変更を加えていません。

ただし、WAS 8.5 では、JSP ページが完全にロードされていません。「ソースの表示」でこれらのページを調べると、HTML コンテンツが半分しか読み込まれていないことがわかります。具体的には、HTML 自体が終了タグで完成されていません。

WAS 7 では、「ソースの表示」の結果は次のようになります。

<html>
...
...
<td..../>
<td..../>
<td..../>
...
...
</html>

しかし、WAS 8.5 の場合は次のようになります。

<html>
...
...
<td..../>
<td..../>
<td..

これまでに次のことを行いました。

  1. WAS 7 と WAS 8.5 でコンパイルされた JSP のクラス ファイルを比較しました。ほぼ同じなので、コンパイルは適切に行われていると思います。ただし、HTML でのページの表示は正しく行われません。
  2. IE で JavaScript デバッグを有効にしてみましたが、読み込み中にエラーは表示されませんでした。
  3. 私が見ることができるアプリケーション ログとサーバー ログにエラーはありません。

私の質問:

  1. 上記の一連の<td>タグは、JSP カスタム タグによって生成されます。タグのコードを確認する必要がありますか?
  2. そのような動作を制御する Websphere の Web Container Settings にカスタム プロパティはありますか?
  3. ページの読み込みを途中で停止させるタイムアウト プロパティはありますか?

他に何を確認すればよいか教えてください。

4

1 に答える 1

0

これは、例外がスローされ、応答が既にコミットされている場合に発生するよく知られた動作です。

通常、例外はログに記録されますが、特定のケースではログに記録されません。

EncodingFilter を削除する回避策を読みましたが、それでも問題を見つけたい場合は、EncodingFilter の前に実行する必要がある Filter をコーディングしてみてください。これにより、response.setBufferSize がより大きなサイズに設定されます。

これは次のようなフィルターになります。

public class ResponseBufferFilter implements Filter
{
    private FilterConfig filterConfig;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        try
        {
            // or better take the value from filterConfig.getInitParameter
            response.setBufferSize(100000000);

            chain.doFilter(request, response);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            throw new ServletException(e.getMessage(), e);
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy()
    {
        filterConfig = null;
    }
}

これはマッピングです:

<filter>
    <filter-name>Response Buffer Filter</filter-name>
    <filter-class>test.example.filter.ResponseBufferFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Response Buffer Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <!-- provide the class causing unwanted behavior -->
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping> 
    <filter-name>SetCharacterEncoding</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

これで問題は解決しませんが、少なくとも何らかの方法で例外のログを許可する必要があります。

于 2014-01-30T09:02:47.747 に答える