假设您想在每个操作上捕获 Web 应用程序的页面源,例如
public void click() {
getPageSource();
}
public void type() {
getPageSource();
}
public void select() {
getPageSource();
}
我必须在每个函数中调用 getPageSource(),但是有没有更简洁的方法来实现这一点?
如果您在 Java Web 应用程序中工作,您应该创建一个过滤器来拦截应用程序中发出的每个请求。这是一个示例:
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>
像这样的事情通常被称为横切关注点,它们不太适合面向对象的框架。简单的答案是,在普通的旧 Java 中,确实没有更好的方法来做到这一点。
有一些解决方案,但根据我的经验,它们并没有被广泛使用,请参见 http://www.eclipse.org/aspectj/
查看您的 Web 应用程序框架是否支持过滤器、侦听器、观察器、拦截器或某种面向方面的编程。您描述的那种问题已经解决了很多次,肯定在您的特定开发环境中您会找到解决方案。