我计划从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..
到目前为止,我已完成以下操作:
我的问题:
<td>
标记集是通过JSP自定义标记生成的。我应该检查标签的代码吗?请建议我还应该检查什么。
答案 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>
这不会解决问题,但至少它应该允许以某种方式记录异常,如果有的话。