捕获java中每个操作的信息的最佳方法是什么?

时间:2012-05-05 20:46:42

标签: java logging

假设您想要在每个操作上捕获Web应用程序的页面源,例如

public void click() {
    getPageSource();
}

public void type() {
    getPageSource();
}

public void select() {
    getPageSource();
}

我必须在每个函数中调用getPageSource(),但有没有更简洁的方法来实现它?

3 个答案:

答案 0 :(得分:2)

如果您正在使用Java Web应用程序,则应创建Filter以拦截应用程序中发出的每个请求。这是一个示例:

Java Class

package edu.home;

import javax.servlet.*;

public class MyFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain filterChain) throws IOException, ServletException {
        System.out.println("New request in the application!");
        //here you can add getPageSource() and send request/response
    }
}

在web.xml中配置过滤器

<!--declare the filter -->
<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>edu.home.FISesionExpirada</filter-class>
</filter>
<!-- declare where the filter should be used -->
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

答案 1 :(得分:0)

这些内容通常称为cross-cutting concerns,并且它们不适合面向对象的框架。简单的答案是,在普通的旧Java中,确实没有更好的方法来实现这一点。

有解决方案,但在我的经验中并没有广泛使用,例如, http://www.eclipse.org/aspectj/

答案 2 :(得分:0)

查看您的Web应用程序框架是否支持过滤器,侦听器,观察器或拦截器,或某种面向方面的编程。您描述的问题已经解决了很多次,当然在您的特定开发环境中,您将找到解决方案。