JSP在Websphere Application Server 8.5上完全加载

时间:2013-10-28 20:21:32

标签: html jsp websphere-8

我计划从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. 我可以看到应用程序日志和服务器日志中没有错误。
  4. 我的问题:

    1. 上面的<td>标记集是通过JSP自定义标记生成的。我应该检查标签的代码吗?
    2. Websphere中的Web容器设置中是否有任何自定义属性可以控制此类行为?
    3. 是否有任何超时属性导致页面中途停止加载?
    4. 请建议我还应该检查什么。

1 个答案:

答案 0 :(得分:0)

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

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

我读到你的工作方式删除了EncodingFilter,但是如果你仍然想找到问题,你可以尝试编写一个Filter,必须在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> 

这不会解决问题,但至少它应该允许以某种方式记录异常,如果有的话。