spring DispatcherServlet,在它之前执行的代码

Posted

技术标签:

【中文标题】spring DispatcherServlet,在它之前执行的代码【英文标题】:spring DispatcherServlet, code to execute before it 【发布时间】:2012-06-20 23:42:35 【问题描述】:

我有 Spring Web 应用程序。我想放一些常见的代码,这些代码将在每个 HTTP 请求的开头执行,以便我可以检查垃圾邮件。我在web.xml 中配置了DispatcherServlet,这意味着DispatcherServlet 是每个HTTP 请求的第一个入口点。我的问题是DispatcherServlet 是否提供了任何方法,这些方法将首先执行,然后将控制传递给请求的注释控制器?

【问题讨论】:

【参考方案1】:

我会同意戴夫。您正在寻找的是映射 url 上所有请求的过滤器/拦截器。传统上,这是使用ServletFilter 完成的。这是您放置自定义代码的地方。例如。

   public FooFilter implements ServletFilter 
    @Override
    void doFilter(ServletRequest request,
              ServletResponse response,
              FilterChain chain)
              throws IOException,
                     ServletException 
        // My Custom check for spam.
    

在 ServletFilter 中实现自定义代码后,您只需在 web.xml 中对其进行配置。

<filter>
    <filter-name>FooFilter</filter-name>
    <filter-class>com.foo.servlet.filters.FooFilter</filter-class>
    <init-param>
        <param-name>test-param</param-name>
        <param-value>Test parameter.</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>FooFilter</filter-name>
    <url-pattern>/*</url-pattern> <!-- The URL to be filtered. -->
</filter-mapping>

这是配置过滤器和拦截 Web 请求的最简单方法。

当使用 Spring 框架时,您会希望使用 Sping 的 HandlerInterceptor。关于何时使用的一个非常好的帖子可以找到here。

希望这会有所帮助。

【讨论】:

ServletFilter?你的意思是javax.servlet.Filter?顺便说一句,链接坏了。并记得拨打chain.doFilter(request), response);【参考方案2】:

IMO 这种功能属于HandlerInterceptor (ref docs)。

【讨论】:

【参考方案3】:

Servlet 过滤器会起作用,因为过滤器总是比任何 Servlet 都先执行。过滤器将在 Dispatcher servlet 之前执行,但拦截器将在 Dispatcher servlet 之后和实际处理程序之前执行!

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review 在我看来,我总结了两点回答问题,一是在调度程序servlet之前可以使用过滤器,在调度程序之后和控制器之前可以使用spring的拦截器,这还不够吗?

以上是关于spring DispatcherServlet,在它之前执行的代码的主要内容,如果未能解决你的问题,请参考以下文章

Initializing Spring DispatcherServlet dispatcherServlet

Spring-DispatcherServlet说明

spring DispatcherServlet

spring学习--DispatcherServlet工作原理

Spring 源码解析之DispatcherServlet源码解析

Spring技术揭幕----DispatcherServlet