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 容器设置中是否有任何自定义属性可以控制此类行为?
  3. 是否有任何超时属性导致页面中途停止加载?

请建议我还应该检查什么。

4

1 回答 1

0

这是一个众所周知的行为,当抛出异常并且已经提交响应时会发生这种行为。

通常会记录异常,但在某些特定情况下不会。

我读到你解决了删除 EncodingFilter 的问题,但如果你仍然想找到问题,你可以尝试编写一个过滤器,它必须在 EncodingFilter 之前执行,它将 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 回答