用Java为计算创建调试网页的最佳方法是什么?

用Java为计算创建调试网页的最佳方法是什么?,java,design-patterns,Java,Design Patterns,我正在开发一个网站,使用一些复杂的计算(NLP相关)。我的客户希望为其中一些计算提供“调试”网页,在这些网页中,他可以使用任意输入运行这些计算,并查看计算过程中出现的所有中间结果 在此请求之前,所有的计算都封装在bean中,中间结果记录到常规日志中 在Java级别捕获所有这些结果并将其呈现为网页的最佳方法是什么?我建议在应用程序中嵌入一个servlet容器(Apache Tomcat或Jetty,我更喜欢Tomcat),并为web界面创建一组JSP/JSF servlet。此解决方案将允许您在w

我正在开发一个网站,使用一些复杂的计算(NLP相关)。我的客户希望为其中一些计算提供“调试”网页,在这些网页中,他可以使用任意输入运行这些计算,并查看计算过程中出现的所有中间结果

在此请求之前,所有的计算都封装在bean中,中间结果记录到常规日志中


在Java级别捕获所有这些结果并将其呈现为网页的最佳方法是什么?

我建议在应用程序中嵌入一个servlet容器(Apache Tomcat或Jetty,我更喜欢Tomcat),并为web界面创建一组JSP/JSF servlet。此解决方案将允许您在web界面中使用所有java企业技术(如JAAS),并避免重新发明轮子

我估计用tomcat创建这样的解决方案需要1天的密集复制/粘贴。在骨架开始呼吸之后,可以在Eclipse可视化工具中通过几次鼠标拖动/单击来创建网页本身

相关链接如下:

最后,我提出了以下解决方案:在计算中使用可选的
ThreadLocal
来存储中间值。最后看起来大致如下:

public class ComplexComputation {
    public static final ThreadLocal<Map<String, Object>> DATA 
        = new ThreadLocal<Map<String, Object>>();

    public Result compute(Inputs inputs) {
        // ... do something ...
        if (DATA.get() != null) { DATA.get().put("intermediate", intermediate); }
        // ... do something ...
        return result;
    }
}

public void computationDebuggingCaller() {
    ComplexComputation.DATA.set(new HashMap<String, Object>());
    new ComplexComputation().compute(...);
    Object intermediate = ComplexComputation.DATA.get().get("intermediate");
}
公共类复杂计算{
公共静态本地数据
=新的ThreadLocal();
公共结果计算(输入){
//…做点什么。。。
if(DATA.get()!=null){DATA.get().put(“中间”,中间);}
//…做点什么。。。
返回结果;
}
}
public void计算调用者(){
ComplexComputation.DATA.set(新的HashMap());
新的ComplexComputation().compute(…);
objectintermediate=ComplexComputation.DATA.get().get(“intermediate”);
}

该应用程序已经是在嵌入式Jetty上运行的web应用程序。问题是如何捕获bean层次结构深层生成的中间计算值,并使控制器能够访问它们,而不牺牲代码的可读性和性能,为什么不使用适配器模式并创建一个记录器来获取servlet的printstream并写入它呢?我不确定您的日志记录是如何设置的,因此在此之前我无法提供进一步的帮助,但您似乎只想使用不同的日志记录实现。谢谢,我会考虑如何做到这一点。