美文网首页
SpringMVC的Java Config

SpringMVC的Java Config

作者: 土豆了解一下 | 来源:发表于2018-02-20 13:21 被阅读0次
摘要

MAVEN的配置细节

因为我们使用Java Config来代替web.xml配置文件,所以需要修改一下maven-war-plugin的配置,避免因为其找到不web.xml文件而报错。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <!--忽略对web.xml文件的检查-->
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Spring MVC的Java Config

web.xml的Java Config

  • 第一种方式,实现WebApplicationInitializer接口
@ComponentScan
@Configuration
@EnableWebMvc // 启用MVC Java config的支持. 相当于 <mvc:annotation-driven/>
public class WebAppConfig {
}
/**
 * 实现WebApplicationInitializer 接口中的onStartup 方法
 * <p>
 * 该类就相当于 web.xml 文件
 */
public class MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        /**
            下面的代码,等价于 :
         <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
         </servlet>
         */
        //1. 创建 AnnotationConfigWebApplicationContext
        AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();
        //用来加载所有的Bean
        webApplicationContext.register(WebAppConfig.class);
        webApplicationContext.setServletContext(servletContext);

        //2. 创建 DispatcherServlet
        ServletRegistration.Dynamic dispatcherServlet =
                // 通过DispatcherServlet来创建web 相关 Bean,所以传入webApplicationContext对象
                servletContext.addServlet("dispatcherServlet", new DispatcherServlet(webApplicationContext));

        /**
            下面的代码,等价于
         <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
         </servlet-mapping>
         */
        dispatcherServlet.addMapping("/");

        dispatcherServlet.setLoadOnStartup(1);

        //3. 注册filter
        FilterRegistration.Dynamic characterEncoding =
                servletContext.addFilter("characterEncoding", new CharacterEncodingFilter("utf-8", true));
        characterEncoding.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "dispatcherServlet");
    }
}
  • 第二种方式,继承AbstractAnnotationConfigDispatcherServletInitializer 推荐使用这种方式
@ComponentScan
@Configuration
@EnableWebMvc // 启用MVC Java config的支持. 相当于 <mvc:annotation-driven/>
public class WebAppConfig {
}
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * ContextLoaderListener创建的应用上下文中的Bean的配置文件
     * 也就是Spring的主配置文件
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{Config.class};
    }

    /**
     * DispatcherServlet应用上下文相关的Bean的配置文件
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebAppConfig.class};
    }

    /**
     * 将一个或者多种路径映射到DispatcherServlet
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

注册自定义Servlet,Filter和Linstener

  • 第一种方式,可以使用Servlet3.0的相关注解,例如@WebFilter
  • 第二种方式,可以通过实现Spring的WebApplicationInitializer接口,在该接口的方法中,注册相关Servlet,Filter和Linstener

相关文章

网友评论

      本文标题:SpringMVC的Java Config

      本文链接:https://www.haomeiwen.com/subject/ellgtftx.html