当前位置: 首页 > 知识库问答 >
问题:

Spring MVC和Servlet 3.0-您还需要web.xml?

计胤
2023-03-14

在典型的Spring MVC Web应用程序中,您可以像这样在web.xml中声明DispatcherServlet

<!-- MVC Servlet -->
<servlet>
    <servlet-name>sample</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

以及侦听器、过滤器等。

使用servlet-api 3.0,您可以用注释@WebServlet声明您的servlet,而不是将它们添加到您的web.xml中。Spring 3.2已经为其上下文配置提供了@Configance@EnableXYZ。它是否有类似的DispatcherServlet,即有没有办法在没有任何xml的情况下配置完整的Spring应用程序

共有2个答案

谭灿
2023-03-14

是的,您不需要web.xml来启动您的webapp Servlet 3.0。正如亚历克斯已经提到的,您可以实现WebApplication ation初始化器类并覆盖onStartup()方法。WebApplication ation初始化器是Spring MVC提供的接口,它确保您的实现被检测到并自动用于初始化任何Servlet 3容器。

有没有办法在没有任何xml的情况下配置完整的Spring应用程序?

添加这个答案只是为了添加另一种方式。您不需要实现WebApplicationInitializer。名为AbstractDispatcherServletInitializerWebApplicationInitializer的抽象基类实现,通过简单地重写指定servlet映射和DispatcherServlet配置位置的方法,使注册DispatcherServlet变得更加容易-

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
        return cxt;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}
丌官信厚
2023-03-14

使用JEE6,如果您的应用程序容器是Servlet 3.0就绪,您需要做的是:

  1. 创建一个自定义类,实现ServletContainerSynalizer(即com.foo.ftServletContainer
  2. 在您的META-INF/service文件夹中创建一个名为javax.servlet.ServletContainerPrializer的文件,该文件将包含上面实现的名称(com.foo.ftServletContainer

Spring 3与一个名为SpringServletContainerInitializer的类捆绑在一起,该类实现了上述内容(因此您不需要在META-INF/services中创建自己的文件)。这个类只调用WebApplicationInitializer的一个实现。因此,您只需要在类路径中提供一个实现它的类(以下代码取自上述文件)。

public class FooInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) {
        WebApplicationContext appContext = ...;

        ServletRegistration.Dynamic dispatcher =
           container.addServlet("dispatcher", new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
 }

这就是网站的内容。xml的东西,但你需要使用@Configuration@EnableWebMvc等来配置webapp。。

 类似资料:
  • 本文向大家介绍SpringMVC + servlet3.0 文件上传的配置和实现代码,包括了SpringMVC + servlet3.0 文件上传的配置和实现代码的使用技巧和注意事项,需要的朋友参考一下 简单几步,实现SpringMVC+servlet3.0文件上传功能: 第一步:配置web.xml文件中的servlet,添加multipart-config: 第二步:在servlet.xml中配

  • 随着新的工具栏小部件的引入和AppCompat(android.support.v7.widget.Toolbar)版本的推出,是否还需要调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处吗;现在我们可以设置标题、子标题、导航图标、导航图标单击侦听器(getSupportActionBar()。直接在工具栏上设置DisplayHomeAs

  • 但当我运行:Caused by:java.lang.IllegalStateException时:您需要将一个theme.AppCompat主题(或后代)与此活动一起使用。 我不明白,谢谢^^

  • 问题内容: java中的try … catch … finally块共有3种排列。 试着抓 尝试…抓住…最后 尝试…最后 一旦执行了finally块,控制权将移至finally块之后的下一行。如果我删除了finally块并将其所有语句移到try … catch块之后的行,那么与将它们放入finally块中的效果相同吗? 问题答案: 我认为willcode最接近在这里表达关键点,也许每个人都知道,但

  • 问题内容: AFAIK,您无需在onclick中指定协议: 坏 好 今天,我在GoogleAnallytics上注意到他们正在使用它: 这个例子是完全错误的,还是有理由指定除?以外的其他内容? 问题答案: 这里的一些响应声称“javascript:”前缀是“过去的遗留物”,这意味着浏览器有意对它进行了特殊处理,以实现向后兼容。是否有确凿的证据证明是这种情况(有人检查过源代码)吗? 对我来说,它的意

  • 问题内容: 众所周知,Windows使用带反斜杠的路径,而Unix使用带反斜杠的路径。node.js提供了始终使用正确的斜杠。因此,例如,您不必编写Unix,而只编写Unix 。 但是,似乎存在这种差异,但是如果您不对路径进行规范化(例如,使用path.join),而仅编写诸如node.js之类的路径,则在Windows上运行脚本没有问题。 那么,有没有写上任何好处了?无论平台如何,两者似乎都可以