• 使用Java配置SpringMVC


    在此之前,一直使用的是XML的方式配置SpringMVC,现在为了适应Servlert3.0以及JavaConfig的Spring配置方式,在这里记录一下使用Java代码配置SpringMVC。首先,来回顾一下使用XML配置的过程:

    1.在web.xml中配置DispatcherServlet

    2.在SpringMVC配置文件中配置viewResolver(视图解析器)

    3.在SpringMVC配置文件中配置两个基本配置

    • <mvc:annotation-driven/>
    • <mvc:default-servlet-handler/>

    4.在SpringMVC配置文件中配置组件扫描Controller(注意与Spring的组件扫描分开,形成父子容器,这也是Spring建议的)

    这几步下来,SpringMVC基本上已经配置完成。我们使用Java配置的过程也大致如此。

    配置DispatcherServlet

    因为不再使用web.xml,那么去哪里配置DispatcherServlet ?

    我们需要使用一个类继承 AbstractAnnotationConfigDispatcherServletInitializer ,继承之后这个类就相当于前端控制器了:

    public class WebAppinitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class<?> [] {RootConfig.class};
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class<?> [] {WebConfig.class};
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[] {"/"};
        }
    
    }

    getRootConfigClasses()方法用于获取根容器的配置类;(Spring的配置文件),相当于父容器配置,这里使用的是名为RootConfig的类

    getServletConfigClasses()方法用于获取web容器的配置类(SpringMVC配置文件),相当于子容器配置,这里使用的是名为WebConfig的类

    getServletMappings() 方法就是用于表明DispatcherServlet的映射信息,“/”表示拦截所有请求,因为是个字符串数组,所以可以写多个映射。

    SpringMVC的配置

    SpringMVC的基本配置包括:视图解析器,两个基本配置。编写一个配置类继承 WebMvcConfigurerAdapter (该类已经过时,新实现WebMvcConfigurationSupport)
    @Configuration
    
    @ComponentScan(value="com.atguigu",includeFilters={
            @Filter(type=FilterType.ANNOTATION,classes={Controller.class})
    },useDefaultFilters=false)
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter{
    
        @Bean
        public ViewResolver viewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setPrefix("/WEB-INF/view/");
            viewResolver.setSuffix(".jsp");return viewResolver;
        }
        
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
        
    }

    在这里我是将视图解析器配置为一个Bean,还可以直接重写WebMvcConfigurerAdapter 类的 configureViewResolvers方法,效果是一样的

    @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
            registry.jsp("/WEB-INF/view/", ".jsp");
        }

    @EnableWebMvc 注解就相当于应用了<mvc:annotation-driven/> ,启用了SpringMVC的高级特性

    重写 configureDefaultServletHandling 方法就是将SpringMVC不能处理的静态资源交给Tomcat处理,相当于<mvc:default-servlet-handler/>

    Spring的配置

    因为要使用父子容器的方式,所以还需要配置Spring,在这里不用配置太复杂,直接扫描除了Controller层的其他组件即可

    @Configuration
    @ComponentScan(value="cn.lynu",excludeFilters={
            @Filter(type=FilterType.ANNOTATION,classes={Controller.class})
    })
    public class RootConfig {
    
    }

    因为这里只是简单的处理Web层,所以不需要太复杂,在这个Spring配置类中就没有任何方法

    OK,至此SpringMVC的Java配置方式已经完成了。继承 AbstractAnnotationConfigDispatcherServletInitializer的方式,会自动注册DispatcherServlet和ContextLoaderListener,而使用XML的方式,我们还需要自己在web.xml中完成它们的注册。
     
  • 相关阅读:
    前端跨域整理
    URL HTML 统一资源定位器(Uniform Resource Locators)
    css属性选择器*=,|=,^=,$=,*=的区别
    JavaScript运算符 ~,~~,|,&,&&
    js获取url参数值的几种方式
    vue 常用插件集合(最全)
    Echarts曲线设置多条X轴和Y轴
    vue中引入.svg图标,使用iconfont图标库(SvgIcon组件使用)
    采用集成的Windows验证和使用Sql Server身份验证进行数据库的登录
    VS如何设置类或函数前不显示引用的数量
  • 原文地址:https://www.cnblogs.com/lz2017/p/9037924.html
Copyright © 2020-2023  润新知