Java Spring MVC-DispatcherServlet by注解

Java Spring MVC-DispatcherServlet by注解,java,spring,model-view-controller,Java,Spring,Model View Controller,我得到了SpringMVC应用程序。 它在Tomcat7上运行。 现在,我在web.xml文件中得到了这一部分: <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class&g

我得到了SpringMVC应用程序。 它在Tomcat7上运行。 现在,我在web.xml文件中得到了这一部分:

<servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/app-config.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

SpringMVC调度程序Servlet
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/app-config.xml
1.
SpringMVC调度程序Servlet
*.htm

有没有办法通过注释初始化它?我得到了一个
MainSettings.java
类,其中我的所有Bean都是由
@Bean
注释初始化的。那么我如何在那里初始化DispatherServlet呢?

下面是一个带有注释的示例。希望这对你有帮助

public class ApplicationInitializer implements WebApplicationInitializer {

    //Called first when the application starts loading.
    public void onStartup(ServletContext servletContext)
            throws ServletException {
        System.out.println("Inside application initializer...");

        //Registering the class that incorporates the annotated DispatcherServlet configuration of spring
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(DispatcherConfig.class);

        //Adding the listener for the rootContext
        servletContext.addListener(new ContextLoaderListener(rootContext));

        //Registering the dispatcher servlet mappings.
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }

}
写这篇文章是因为会创建另一个上下文,而这个上下文看不到安全上下文的内容

public class WebInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    private static final Log LOGGER = LogFactory.getLog(WebInitializer.class);

    @Override
    protected Class<?>[] getRootConfigClasses() {
        /*  this is where you will return you config class
         *  your root config class should @Import other configs 
         *  to make them work without needing them to add there
         */
        return new Class[] { ViewConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[0];
    }

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

}
公共类WebInitializer扩展
AbstractAnnotationConfigDispatchersServletInitializer{
私有静态最终日志记录器=LogFactory.getLog(WebInitializer.class);
@凌驾
受保护类[]getRootConfigClasses(){
/*这是您将返回config类的地方
*您的根配置类应该@Import其他配置
*使它们工作,而不需要添加它们
*/
返回新类[]{ViewConfig.Class};
}
@凌驾
受保护类[]getServletConfigClasses(){
返回新类[0];
}
@凌驾
受保护的字符串[]getServletMappings(){
返回新字符串[]{”/“};
}
}

看看这个-您不想将
rootContext
传递给
DispatcherServlet
。传递一个以
rootContext
为父级的空上下文。否则,上下文将初始化两次。我还建议扩展
AbstractAnnotationConfigDispatcherServletInitializer
,而不是实现
WebApplicationInitializer
。我找不到DispatcherConfig.class。我从哪里可以得到这个?@ShervinAsgari检查您的Sprint mvc依赖项。确保你有正确的版本。上面的示例基于Spring3。2@ShervinAsgari它是用户定义的。