為什麼過濾器只執行一次?
我編寫了一個測試的過濾器,當我第一次裝載一個servlet時,過濾器發揮作用,重複重新整理該servlet時,過濾器沒有被呼叫,是否是我的配置有問題,如果真是這樣,就無法使用它來做認證了。請高手指點。謝謝
我的web.xml:
<web-app>
<filter>
<filter-name>Servlet Mapped Filter</filter-name>
<filter-class>filters.ExampleFilter</filter-class>
<init-param>
<param-name>attribute</param-name>
<param-value>filters.ExampleFilter.SERVLET_MAPPED</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Servlet Mapped Filter</filter-name>
<servlet-name>invoker</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</web-app>
過濾器程式:
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public final class ExampleFilter implements Filter {
private String attribute = null;
private FilterConfig filterConfig = null;
public void destroy() {
System.out.println("enter filter.destory()");
this.attribute = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
System.out.println("enter filter.doFilter()");
// Store ourselves as a request attribute (if requested)
if (attribute != null)
request.setAttribute(attribute, this);
// Time and log the subsequent processing
long startTime = System.currentTimeMillis();
chain.doFilter(request, response);
long stopTime = System.currentTimeMillis();
String url = ((HttpServletRequest)request).getRequestURI();
filterConfig.getServletContext().log
(this.toString() + "(" + url + "): " + (stopTime - startTime) +
" milliseconds");
}
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("enter filter.init()");
this.filterConfig = filterConfig;
this.attribute = filterConfig.getInitParameter("attribute");
}
public String toString() {
if (filterConfig == null)
return ("InvokerFilter()");
StringBuffer sb = new StringBuffer("InvokerFilter(");
sb.append(filterConfig);
sb.append(")");
return (sb.toString());
}
}
我的web.xml:
<web-app>
<filter>
<filter-name>Servlet Mapped Filter</filter-name>
<filter-class>filters.ExampleFilter</filter-class>
<init-param>
<param-name>attribute</param-name>
<param-value>filters.ExampleFilter.SERVLET_MAPPED</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Servlet Mapped Filter</filter-name>
<servlet-name>invoker</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</web-app>
過濾器程式:
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public final class ExampleFilter implements Filter {
private String attribute = null;
private FilterConfig filterConfig = null;
public void destroy() {
System.out.println("enter filter.destory()");
this.attribute = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
System.out.println("enter filter.doFilter()");
// Store ourselves as a request attribute (if requested)
if (attribute != null)
request.setAttribute(attribute, this);
// Time and log the subsequent processing
long startTime = System.currentTimeMillis();
chain.doFilter(request, response);
long stopTime = System.currentTimeMillis();
String url = ((HttpServletRequest)request).getRequestURI();
filterConfig.getServletContext().log
(this.toString() + "(" + url + "): " + (stopTime - startTime) +
" milliseconds");
}
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("enter filter.init()");
this.filterConfig = filterConfig;
this.attribute = filterConfig.getInitParameter("attribute");
}
public String toString() {
if (filterConfig == null)
return ("InvokerFilter()");
StringBuffer sb = new StringBuffer("InvokerFilter(");
sb.append(filterConfig);
sb.append(")");
return (sb.toString());
}
}
相關文章
- 定時器setInterval,只執行一次/第一次延遲執行定時器
- PHP通過lock控制程式只執行一次PHP
- 為什麼建議一個容器中只執行一個程式
- 為什麼不要在Linux上只執行開源軟體?Linux
- 布隆過濾器是什麼鬼?有什麼用?過濾器
- 【ASP.NET Core】MVC過濾器:執行流程ASP.NETMVC過濾器
- 在.net中為什麼第一次執行會慢?
- 監聽器,過濾器,攔截器的執行過程和對比過濾器
- 面試官問:什麼是布隆過濾器?面試過濾器
- 為什麼要把 JavaScript 放到伺服器端上執行?JavaScript伺服器
- 多執行緒訪問—限制某個方法只執行一次執行緒
- 什麼是布隆過濾器?在php裡你怎麼用?過濾器PHP
- 使用互斥物件讓程式只執行一次 (轉)物件
- 過濾Servlet--過濾器Servlet過濾器
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- Shiro原理解析(二)--過濾器的執行機制過濾器
- 為什麼Podman執行容器更安全?
- python為什麼要用執行緒Python執行緒
- 為什麼要使用執行緒池執行緒
- springmv的過濾器和攔截器的區別是什麼Spring過濾器
- 執行緒池管理(1)-為什麼需要執行緒池執行緒
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- 過濾器、攔截器、AOP、ControllerAdvcie執行順序對比過濾器Controller
- 過濾器過濾器
- 我自定義的攔截器為什麼會靠後執行?
- Redis為什麼是單執行緒?為什麼有如此高的效能?Redis執行緒
- 為什麼?為什麼StringBuilder是執行緒不安全的?UI執行緒
- Promise為什麼比setTimeout先執行?Promise
- ArrayList 為什麼執行緒不安全執行緒
- 為什麼 響應式資料被重新賦值了三次,但是監聽回撥只執行了一次賦值
- 4、過濾器的使用及自定義過濾器過濾器
- 蘋果為什麼只在中國生產iPhone?蘋果iPhone
- 點雲濾波器與過濾器過濾器
- GC 為什麼要掛起使用者執行緒? 什麼愁什麼怨?GC執行緒
- 代理過濾器過濾器
- vue 過濾器Vue過濾器
- Filter過濾器Filter過濾器
- hbase過濾器過濾器