hi,guys:
these days i am reviewing the code of the portlet filter. the portlet
filter in pluto2.0 is so different from the servlet filter.
everytime a filter is called, it initialed, doFilter,and then destroyed.
take the action filter for example, we may find the code in the
org.apache.pluto.driver.services.container.FilterChainImpl
public void doFilter(ActionRequest request, ActionResponse response)
throws IOException, PortletException {
...
ActionFilter filter = (ActionFilter)
loader.loadClass(filterDD.getFilterClass()).newInstance();
FilterConfigImpl filterConfig = new
FilterConfigImpl(filterDD.getFilterName(),filterDD.getInitParam(),portletContext);
filter.init(filterConfig);
filter.doFilter(request, response, this);
filter.destroy();
...
}
But it isn't like that in servlet filter. so i writer a servlet filter,
public class TestServletFilter implements Filter {
private int i;
public void init(FilterConfig arg0) throws ServletException {
i = 0;
System.out.println("TestServletFilter init...");
}
public void destroy() {
System.out.println("TestServletFilter destroy...");
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
i++;
System.out.println("TestServletFilter msg\t="+i);
}
}
then i get the output from the console
---------------------------------------
TestServletFilter msg =1
TestServletFilter msg =2
TestServletFilter msg =3
TestServletFilter msg =4
TestServletFilter msg =5
---------------------------------------
also i write a portlet filter,and the output is
---------------------------------------
TestPortletFilter: TestPortletFilter init...
TestPortletFilter Render iRender=1
TestPortletFilter: destroy iRender=1
TestPortletFilter: TestPortletFilter init...
TestPortletFilter Render iRender=1
TestPortletFilter: destroy iRender=1
TestPortletFilter: TestPortletFilter init...
TestPortletFilter Render iRender=1
TestPortletFilter: destroy iRender=1
---------------------------------------
and i donot think we need a new instance everytime.