• SpringMVC基于代码的配置方式(零配置,无web.xml)直接继承WebMvcConfigurerAdapter


    基于配置文件的web项目维护起来可能会更方便,但是有时候我们会有一些特殊的需求,比如防止客户胡乱更改配置,这时候我们需要给配置隐藏到代码中。

    1.创建一个动态web项目(无需web.xml)

    2.右键项目添加几个package: com.easyweb.config (保存项目配置) com.easyweb.controller (保存springMvc controller)

    3.在 com.easyweb.config 新建一个类 WebApplicationStartup ,这个类实现WebApplicationInitializer 接口,是项目的入口,作用类似于web.xml,具体代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <code class="hljs" java="">package com.easyweb.config;
     
    import javax.servlet.MultipartConfigElement;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRegistration.Dynamic;
     
    import org.springframework.web.WebApplicationInitializer;
    import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
    import org.springframework.web.servlet.DispatcherServlet;
     
    /**
     * 服务器启动入口类
     *
     * @author Administrator
     *
     */
    public class WebApplicationStartup implements WebApplicationInitializer {
     
      private static final String SERVLET_NAME = Spring-mvc;
     
      private static final long MAX_FILE_UPLOAD_SIZE = 1024 * 1024 * 5; // 5 Mb
     
      private static final int FILE_SIZE_THRESHOLD = 1024 * 1024; // After 1Mb
     
      private static final long MAX_REQUEST_SIZE = -1L; // No request size limit
     
      /**
       * 服务器启动调用此方法,在这里可以做配置 作用与web.xml相同
       */
      @Override
      public void onStartup(ServletContext servletContext) throws ServletException {
        // 注册springMvc的servlet
        this.addServlet(servletContext);
        // 注册过滤器
        // servletContext.addFilter(arg0, arg1)
        // 注册监听器
        // servletContext.addListener(arg0);
      }
     
      /**
       * 注册Spring servlet
       *
       * @param servletContext
       */
      private void addServlet(ServletContext servletContext) {
        // 构建一个application context
        AnnotationConfigWebApplicationContext webContext = createWebContext(SpringMVC.class, ViewConfiguration.class);
        // 注册spring mvc 的 servlet
        Dynamic dynamic = servletContext.addServlet(SERVLET_NAME, new DispatcherServlet(webContext));
        // 添加springMVC 允许访问的Controller后缀
        dynamic.addMapping(*.html, *.ajax, *.css, *.js, *.gif, *.jpg, *.png);
        // 全部通过请用 “/”
        // dynamic.addMapping(/);
        dynamic.setLoadOnStartup(1);
        dynamic.setMultipartConfig(new MultipartConfigElement(null, MAX_FILE_UPLOAD_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD));
      }
     
      /**
       * 通过自定义的配置类来实例化一个Web Application Context
       *
       * @param annotatedClasses
       * @return
       */
      private AnnotationConfigWebApplicationContext createWebContext(Class<!--?-->... annotatedClasses) {
        AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
        webContext.register(annotatedClasses);
     
        return webContext;
      }
     
    }</code>

    4.在com.easyweb.config 下添加类 SpringMVC 继承 WebMvcConfigurerAdapter,这个类的作用是进行SpringMVC的一些配置,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <code class="hljs" java="">package com.easyweb.config;
     
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    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;
     
    @Configuration
    @EnableWebMvc
    //指明controller所在的包名
    @ComponentScan(basePackages = {com.easyweb.controller})
    public class SpringMVC extends WebMvcConfigurerAdapter {
     
      /**
       * 非必须
       */
      @Override
      public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
      }
     
      /**
       * 如果项目的一些资源文件放在/WEB-INF/resources/下面
       * 在浏览器访问的地址就是类似:https://host:port/projectName/WEB-INF/resources/xxx.css
       * 但是加了如下定义之后就可以这样访问:
       * 非必须
       */
      @Override
      public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler(/resources/**/*).addResourceLocations(/WEB-INF/resources/);
      }
    }</code>

    5.添加view配置文件com.easyweb.config下新建类ViewConfiguration,里面可以根据自己的需要定义视图拦截器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <code avrasm="" class="hljs">package com.easyweb.config;
     
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.view.JstlView;
    import org.springframework.web.servlet.view.UrlBasedViewResolver;
    import org.springframework.web.servlet.view.tiles2.TilesConfigurer;
    import org.springframework.web.servlet.view.tiles2.TilesView;
     
    @Configuration
    public class ViewConfiguration {
     
        @Bean
        public ViewResolver urlBasedViewResolver() {
            UrlBasedViewResolver viewResolver;
            viewResolver = new UrlBasedViewResolver();
            viewResolver.setOrder(2);
            viewResolver.setPrefix(/WEB-INF/);
            viewResolver.setSuffix(.jsp);
            viewResolver.setViewClass(JstlView.class);
            // for debug envirment
            viewResolver.setCache(false);
            return viewResolver;
        }
        @Bean
        public ViewResolver tilesViewResolver() {
            UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
            urlBasedViewResolver.setOrder(1);
            urlBasedViewResolver.setViewClass(TilesView.class);
            //urlBasedViewResolver.
            return urlBasedViewResolver;
        }
        @Bean
        public TilesConfigurer tilesConfigurer() {
            TilesConfigurer tilesConfigurer = new TilesConfigurer();
            tilesConfigurer.setDefinitions(new String[] { classpath:tiles.xml });
            return tilesConfigurer;
        }
    }</code>

    6.本例中还用了tiles视图解析器,替换了原始的include方式

  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/7904743.html
Copyright © 2020-2023  润新知