zoukankan      html  css  js  c++  java
  • SPRING IN ACTION 第4版笔记-第五章Building Spring web applications-001-SpringMVC介绍

    一、

     

    二、用Java文件配置web application

    1.

     1 package spittr.config;
     2 
     3 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
     4 
     5 import spittr.web.WebConfig;
     6 
     7 public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
     8   
     9   @Override
    10   protected Class<?>[] getRootConfigClasses() {
    11     return new Class<?>[] { RootConfig.class };
    12   }
    13 
    14   @Override
    15   protected Class<?>[] getServletConfigClasses() {
    16     //Specify configuration class
    17     return new Class<?>[] { WebConfig.class };
    18   }
    19 
    20   @Override
    21   protected String[] getServletMappings() {
    22     //Map DispatcherServlet to "/"
    23     return new String[] { "/" };
    24   }
    25 
    26 }

    (1)值得注意的是SpitterWebInitializer继承了AbstractAnnotationConfigDispatcherServletInitializer,所以在Servlet3.1以上的容器中,会自动将此类作为DispatcherServlet和Spring Application Context的配置文件

    从Servlect3.0开始,窗器会在classpath中寻找实现javax.servlet.ServletContainerInitializer的类作为配置文件,而Spring提供了实现SpringServletContainerInitializer、WebApplicationInitializer、AbstractAnnotationConfigDispatcherServletInitializer

    (2)在Spring web application通常有两种context:Dispactcherservlet、ContextLoaderListener

    Dispactcherservlet用来装载springmvc相关组件,如controller、view resolvers、handler mappings,ContextLoaderListener是装载应用的其他组件,通常是中间层和后台打交道的组件,如service、dao。 上述配置文件通过getServletConfigClasses()以返回的java配置文件来定义Dispatcherservlet,用getRootConfigClasses()以返回的配置文件定义ContextLoaderListener,其实就是相当于以前的web.xml配置

    2.

    package spittr.web;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    
    @Configuration
    @EnableWebMvc
    @ComponentScan("spittr.web")
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Bean
      public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
      }
      
      @Override
      public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        //Configure static content handling
        configurer.enable();    
        //configurer.enable();是you’re asking  DispatcherServlet to forward
        //requests for static resources to the servlet container’s default servlet and not to try to
        //handle them itself.
      }
      
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // TODO Auto-generated method stub
        super.addResourceHandlers(registry);
      }
    
    }

    在xml中是用 <mvc:annotation-driven>

    3.

    package spittr.config;
    
    import java.util.regex.Pattern;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.ComponentScan.Filter;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.FilterType;
    import org.springframework.context.annotation.Import;
    import org.springframework.core.type.filter.RegexPatternTypeFilter;
    
    import spittr.config.RootConfig.WebPackage;
    
    @Configuration
    @Import(DataConfig.class)
    @ComponentScan(basePackages={"spittr"}, 
        excludeFilters={
            @Filter(type=FilterType.CUSTOM, value=WebPackage.class)
        })
    public class RootConfig {
      public static class WebPackage extends RegexPatternTypeFilter {
        public WebPackage() {
          super(Pattern.compile("spittr\.web"));
        }    
      }
    }

    4.

     1 package spittr.config;
     2 
     3 import javax.sql.DataSource;
     4 
     5 import org.springframework.context.annotation.Bean;
     6 import org.springframework.context.annotation.Configuration;
     7 import org.springframework.jdbc.core.JdbcOperations;
     8 import org.springframework.jdbc.core.JdbcTemplate;
     9 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
    10 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
    11 
    12 @Configuration
    13 public class DataConfig {
    14 
    15   @Bean
    16   public DataSource dataSource() {
    17     return new EmbeddedDatabaseBuilder()
    18             .setType(EmbeddedDatabaseType.H2)
    19             .addScript("schema.sql")
    20             .build();
    21   }
    22   
    23   @Bean
    24   public JdbcOperations jdbcTemplate(DataSource dataSource) {
    25     return new JdbcTemplate(dataSource);
    26   }
    27 
    28 }

    5.

  • 相关阅读:
    Oracle FGA审计记录的清理步骤
    UVa11488-Hyper Prefix Sets(trie树)
    配置Log4j(非常具体)
    poj1190生日蛋糕
    zju1610Count the Colors
    【例9.3】求最长不下降序列
    P1364 医院设置
    P1629 邮递员送信
    P1476 休息中的小呆
    P1330 封锁阳光大学
  • 原文地址:https://www.cnblogs.com/shamgod/p/5241285.html
Copyright © 2011-2022 走看看