我正在使用具有单个DispatcherServlet的spring 2.5应用程序。该应用程序还将与Jersey集成以用于REST服务。
我正在尝试过滤每个请求到应用程序。 Filter / OncePerRequestFilter(我试过两个)工作正常,但似乎应用程序多次为单个请求调用doFilter / doInternalFilter。通过尝试另外三个不同的请求,结果发现有更多样式表/脚本文件的页面有助于更多的函数调用。
我是否对过滤器标准架构做错了什么。是否有任何需要更改或添加到应用程序..
public class UnfepiRequestFilter extends OncePerRequestFilter{
@Override
protected void doFilterInternal (HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
System.out.println("Start filtering");
filterChain.doFilter(request, response);
System.out.println("Done Filtering");
}
}
web.xml文件:
<filter>
<filter-name>filterHeader</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>filterHeader</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/myApp-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<display-name>myApp</display-name>
<servlet>
<servlet-name>myApp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myApp</servlet-name>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.action</url-pattern>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
基本上这是在特定时间重定向或拒绝用户请求(用于维护任务或临时使任何服务不可用)。有没有办法防止这些多次调用每个请求过滤器。 任何帮助将不胜感激..
答案 0 :(得分:1)
好像你没有做错任何事。您的过滤器每次请求仅被称为 。但是这个:
通过尝试三个不同的请求,结果显示该页面 其中有更多样式表/脚本文件有助于更多 函数调用。
让我觉得您不了解浏览器加载网页的方式。网页上的每个资产(脚本,样式表,图像)都会在其自己的请求中加载。没有链接资源的简单HTML应该会导致单个服务器调用。