经常会遇到设计的某个bean可能同时被两个存在前后导航关系页面所调用,这个时候把这个bean放在session范围内,使bean的状态得以维持,但当在其他不需要该bean工作的页面时,对该sessionbean进行销毁、释放内存。
package filter;
销毁sessionbean通过过滤器来可以轻松的实现,不需要在后台对某个变量进行生成后的销毁。但一直提示if语句有错误抛出,不知道什么原因,不过不影响使用。
例如:名为manageNote的托管bean,分别被note.xhtml、editNote.xhtml所调用,过滤器判断当离开这两个页面其中之一时,就销毁sessionbean。
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.*;
/**
*
* @author zhangheran
*/
public class sessionFilter implements Filter {
protected FilterConfig filterConfig = null;
protected String url;
public sessionFilter() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest hRequest = (HttpServletRequest) request;
url = hRequest.getPathInfo();
if (url.contains("xhtml")) {
if (url.contains("note")) {
chain.doFilter(request, response);
return;
}else if(url.contains("editNote")){
chain.doFilter(request, response);
return;
}else {
HttpSession session = hRequest.getSession(true);
session.removeAttribute("manageNote");
chain.doFilter(request, response);
return;
}
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
}
另外在web.xml中要部署的代码就不贴了。
另外在web.xml中要部署的代码就不贴了。