2012-05-05 41 views
1

假設您想要在每個操作中捕獲Web應用程序的頁面源,例如捕獲java中每個動作的信息的最佳方法是什麼?

public void click() { 
    getPageSource(); 
} 

public void type() { 
    getPageSource(); 
} 

public void select() { 
    getPageSource(); 
} 

我必須在每個函數中調用getPageSource(),但有沒有更好的方法來實現這個功能?

回答

0

像這樣的東西通常被稱爲cross-cutting concerns,它們不適合面向對象的框架。簡單的答案是,在普通的Java中,確實沒有更好的方法來做到這一點。

有解決方案,但他們沒有被廣泛使用在我的經驗,例如參見 http://www.eclipse.org/aspectj/

0

看看你的web應用框架支持過濾器或監聽器,或觀察員,或攔截器,或某種面向方面的編程。你描述的這種問題已經解決了很多次,當然在你的特定開發環境中你會找到一個解決方案。

2

如果您正在使用Java Web應用程序,則應該創建一個Filter來截獲在應用程序中發出的每個請求。下面是一個示例:

的Java類

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> 
相關問題