返回介绍

7.1.2 添加其他的 Servlet 和 Filter

发布于 2024-08-17 00:45:50 字数 2001 浏览 0 评论 0 收藏 0

按照AbstractAnnotationConfigDispatcherServletInitializer的定义,它会创建DispatcherServlet和ContextLoaderListener。但是,如果你想注册其他的Servlet、Filter或Listener的话,那该怎么办呢?

基于Java的初始化器(initializer)的一个好处就在于我们可以定义任意数量的初始化器类。因此,如果我们想往Web容器中注册其他组件的话,只需创建一个新的初始化器就可以了。最简单的方式就是实现Spring的WebApplicationInitializer接口。

例如,如下的程序清单展现了如何创建WebApplicationInitializer实现并注册一个Servlet。

程序清单7.1 通过实现WebApplicationInitializer来注册Servlet

程序清单7.1是相当基础的Servlet注册初始化器类。它注册了一个Servlet并将其映射到一个路径上。我们也可以通过这种方式来手动注册DispatcherServlet。(但这并没有必要,因为AbstractAnnotationConfigDispatcherServletInitializer没用太多代码就将这项任务完成得很漂亮。)

类似地,我们还可以创建新的WebApplicationInitializer实现来注册Listener和Filter。例如,如下的程序清单展现了如何注册Filter。

程序清单7.2 注册Filter的WebApplicationInitializer

如果要将应用部署到支持Servlet 3.0的容器中,那么WebApplicationInitializer提供了一种通用的方式,实现在Java中注册Servlet、Filter和Listener。不过,如果你只是注册Filter,并且该Filter只会映射到DispatcherServlet上的话,那么在AbstractAnnotationConfigDispatcherServletInitializer中还有一种快捷方式。

为了注册Filter并将其映射到DispatcherServlet,所需要做的仅仅是重载AbstractAnnotationConfigDispatcherServletInitializer的getServlet-Filters()方法。例如,在如下的代码中,重载了AbstractAnnotationConfig-DispatcherServletInitializer的getServletFilters()方法以注册Filter:

我们可以看到,这个方法返回的是一个javax.servlet.Filter的数组。在这里它只返回了一个Filter,但它实际上可以返回任意数量的Filter。在这里没有必要声明它的映射路径,getServletFilters()方法返回的所有Filter都会映射到DispatcherServlet上。

如果要将应用部署到Servlet 3.0容器中,那么Spring提供了多种方式来注册Servlet(包括DispatcherServlet)、Filter和Listener,而不必创建web.xml文件。但是,如果你不想采取以上所述方案的话,也是可以的。假设你需要将应用部署到不支持Servlet 3.0的容器中(或者你只是希望使用web.xml文件),那么我们完全可以按照传统的方式,通过web.xml配置Spring MVC。让我们看一下该怎么做。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文