【问题标题】:Migration from web.xml to JavaConfig从 web.xml 迁移到 JavaConfig
【发布时间】:2014-06-14 01:42:59
【问题描述】:

我正在开始一个新的 spring mvc 项目,我想使用注释进行所有配置。我认为我遇到的问题是将 web.xml 迁移到 AppInitializer,因为当我进行更改并使用新配置部署应用程序时,我得到 404 的 url,该 url 在更改之前工作正常

我当前的 web.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <servlet>
        <servlet-name>sample</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>ar.com.orangebit.springMvcQuickstart.config</param-value>
        </init-param>
    </servlet>

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

</web-app>

而我认为有问题的 AppInitializer 是:

public class AppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext)
            throws ServletException {
        WebApplicationContext context = getContext();
        servletContext.addListener(new ContextLoaderListener(context));
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
                "DispatcherServlet", new DispatcherServlet(context));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
    }

    private AnnotationConfigWebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("ar.com.orangebit.springMvcQuickstart.config");
        return context;
    }

}

使用上面的类,当我创建gradle jettyRunWar 并输入localhost:8080 时,我看到目录 META-INF 和 WEB-INF 而不是 webapp 的主页。

如果您想查看项目的其余部分,它在 github 上的当前代码

【问题讨论】:

标签: java xml spring spring-mvc servlet-3.0


【解决方案1】:

只有在使用 jetty 插件时才会出现此问题。如果您在带有 Tomcat 的 IDE 中运行应用程序,或者将其打包到 war 中并将其部署到 Tomcat,它就可以正常工作。

我猜码头插件不能很好地与 Servlet 3 初始化程序配合使用。

查看您的代码,我发现您使用的是 Spring 4,因此我建议您查看 Spring Boot

如果您使用它,您将能够删除大部分 Spring 配置文件,并且它还内置了对 Embedded Tomcat 和 Jetty 的支持(我实际上没有使用过这个选项),它们可以完美地与 IDE 和构建工具一起工作比如 Maven 和 Gradle。

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2015-05-05
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多