假設您想要在每個操作中捕獲Web應用程序的頁面源,例如捕獲java中每個動作的信息的最佳方法是什麼?
public void click() {
getPageSource();
}
public void type() {
getPageSource();
}
public void select() {
getPageSource();
}
我必須在每個函數中調用getPageSource(),但有沒有更好的方法來實現這個功能?
假設您想要在每個操作中捕獲Web應用程序的頁面源,例如捕獲java中每個動作的信息的最佳方法是什麼?
public void click() {
getPageSource();
}
public void type() {
getPageSource();
}
public void select() {
getPageSource();
}
我必須在每個函數中調用getPageSource(),但有沒有更好的方法來實現這個功能?
像這樣的東西通常被稱爲cross-cutting concerns,它們不適合面向對象的框架。簡單的答案是,在普通的Java中,確實沒有更好的方法來做到這一點。
有解決方案,但他們沒有被廣泛使用在我的經驗,例如參見 http://www.eclipse.org/aspectj/
看看你的web應用框架支持過濾器或監聽器,或觀察員,或攔截器,或某種面向方面的編程。你描述的這種問題已經解決了很多次,當然在你的特定開發環境中你會找到一個解決方案。
如果您正在使用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>