SSM整合(Spring + Spring MVC + MyBatis)

SSM整合(Spring + Spring MVC + MyBatis)

介绍

SSM是Spring + Spring MVC + MyBatis,把 Spring MVC 配置的xml换成配置类。
SSM整合是后面大部分项目的标配

MyBatis整合

Spring 整合(连接池+MyBatis)

web.xml 对应的配置类

web配置类,用于取代 web.xml。在继承的父类中已经帮我们创建了 DispatcherServlet 并初始化,只需要在重写的 getServletMappings方法 中指定映射的地址即可,相当于 web.xml 中的<url-paffern>/</url-paffern>

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 加载主配置类
     * 父容器
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    /**
     * 加载 mvc 的配置类
     * 子容器
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{配置类.class};
    }

    /**
     * 给 DispatcherServlet 配置 url-pattern
     * 捕获的路径
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

AbstractAnnotationConfigDispatcherServletInitializer抽象类

dispatcher-servlet.xml 对应的配置类

WebMvcConfigurer接口

@Configuration
// 启动mvc注解驱动
@EnableWebMvc
// 实现 WebMvcConfigurer接口 用于覆盖默认的配置
public class MvcConfig implements WebMvcConfigurer {
    /** 配置类同样支持依赖注入(配置类同样也是受容器管理的)
    @Autowired
    private LoginInterceptor loginInterceptor;
     **/

    /**
     * 静态资源处理方式一:使用容器的默认Servlet来处理
     * 注意:重写 WebMvcConfigurer接口 方法时不要使用 @Bean 注解来装配
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        // enable():启用容器默认servlet处理静态资源
        configurer.enable();
    }

    /**
     * 静态资源处理方式二:由SpringMVC处理静态资源
     * 注意:重写 WebMvcConfigurer接口 方法时不要使用 @Bean 注解来装配
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/映射路径/**").addResourceLocations("/被映射的路径/");
    }

    /**
     * 装配Bean验证器1
     */
    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
        // 使用Hibernate框架提供的Bean验证器
        factoryBean.setProviderClass(HibernateValidator.class);
        // 指定资源文件
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:message");
        messageSource.setDefaultEncoding("UTF-8");
        // 装配给 factoryBean
        factoryBean.setValidationMessageSource(messageSource);
        return factoryBean;
    }

    /**
     * 如果使用Servlet文件上传就不需要配置,如果使用第三方的就需要配置 commons-upload上传解析器
     */
    @Bean
    public CommonsMultipartResolver multipartResolver(){
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        // 设置文件上传大小限制(可以不设置)
//        resolver.setMaxUploadSize(1024);
        // 设置编码
        resolver.setDefaultEncoding("UTF-8");
        return resolver;
    }

    /**
     * 装配拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                // 拦截的请求
                .addPathPatterns("/*.html")
                // 排除的请求
                .excludePathPatterns("/*/*.js","/login");
    }

    /**
     * 跨域配置
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowedHeaders("*")
                .exposedHeaders("*")
                // 跨域时是否允许传递 cookie,默认是不允许的
                .allowCredentials(true);
    }

    /**
     * 配置内部资源视图解析器(内部资源视图的转发)
     * 可选项
     */
    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}