0

我对 tomcat 7、spring 3.1.1 和 windows 7 pro x64 有一个大而奇怪的问题。

当我的 Web 应用程序引发异常并且由此自定义 HandlerExceptionResolver 管理时,就会出现问题:

public class JsonHandlerExceptionResolver implements HandlerExceptionResolver {

    private static Logger log = Logger.getLogger(JsonHandlerExceptionResolver.class);


    @Override
    @ResponseBody
    public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse response, Object obj, Exception e) {
        Output out=new Output(false);
        out.setException(e.getClass().getName());
        out.setError(e.getLocalizedMessage());
        response.setContentType("application/json");
        log.error("",e);
        try{
            response.getWriter().println(new Gson().toJson(new Output(e.getMessage(),e.getClass().getSimpleName())));
            response.getWriter().flush();
            response.getWriter().close();
        }catch (Exception e1) {
            log.error(e1);
            e1.printStackTrace();
        }
        return null;
    }

}

http 请求挂起,我必须停止 tomcat 才能解锁它。在日志文件中,我可以看到正确的堆栈跟踪,但它仅在 tomcat 关闭命令之后打印(所以我知道 tomcat 真的挂了)。

奇怪的是,只有当tomcat由C#应用程序启动时才会出现这个问题(它运行带有正确参数的javaw进程),如果我尝试通过命令行启动它(使用相同的命令),问题不会发生!请注意,这个错误不是系统性的,在许多相同的系统(win7 + tomcat)中它都有效。你知道可以是什么吗?

4

1 回答 1

0

我的猜测是,如果 C# 正在生成 Tomcat,那么共享 IO 可能存在一些问题,可以通过检查 StartInfo.RedirectStandardError 属性来验证。

有关详细说明,请参阅ProcessInfo 和 RedirectStandardOutput

干杯

于 2013-08-27T08:12:28.760 回答