Spring——Java代码配置web.xml和spring.xml

  • 一、web.xml 配置文件
  • 二、spring.xml 配置文件


注:常用的web配置和spring配置。。。(持续补充中)

一、web.xml 配置文件

  早期的Java Web项目必须要有web.xml文件作为项目的入口配置文件。 Servlet 3.0之后提供了一个接口 ServletContainerInitializer 允许在容器启动阶段通过代码进行 Servlet、Filter、Listener等注册以及初始化参数配置等。【即取代web.xml配置文件】【Tomcat 7以后版本开始支持Servlet 3.0】

/**
 * SpringMVC的配置类
 */
@Configuration
@ComponentScan("com.ccbx.controller")
//开启注解驱动【否则未使用@Bean的方法就不起作用】
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {

    //使用默认的servlet(Tomcat中的DefaultServlet)处理静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    //配置消息转换器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //        处理响应中文内容的乱码【场景:@ResponseBody注解修饰的字符串返回值回显到浏览器上】
        StringHttpMessageConverter messageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        //        springmvc通过默认的json转换器可以把pojo对象(bean)或集合转换为json数据响应给客户端
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        converters.add(messageConverter);
        converters.add(jackson2HttpMessageConverter);
    }

    //配置文件上传解析器
    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setDefaultEncoding("UTF-8");
        //文件最大上传字节数【5*1024*1024=5242880字节】
        multipartResolver.setMaxUploadSize(5242880);
        return multipartResolver;
    }

    //添加自定义的拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        MyInterceptor myInterceptor=new MyInterceptor();
        // <mvc:mapping path="/**"/>对应的addPathPatterns():拦截所有请求(拦截Controller所有的方法调用)
        // excludePathPatterns():不拦截哪些请求
        registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/","/my/test3");
    }

    //注册Shiro方言对象
    @Bean
    public ShiroDialect shiroDialect() {
        return new ShiroDialect();
    }

    //********************** 【thymeleaf视图模板配置依赖关系】 视图解析器 <-- 模板引擎 <-- 模板解析器 ************************
    //配置模板解析器
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver srtr = new SpringResourceTemplateResolver();
        //前缀【设置要添加到所有模板名称的新(可选)前缀,以便将模板名称转换为资源名称】
        srtr.setPrefix("/WEB-INF/templates/");
        //后缀【设置要添加到所有模板名称的新(可选)后缀,以便将模板名称转换为资源名称】
        srtr.setSuffix(".html");
        //设置要应用于此解析器解析的模板的模板模式
        srtr.setTemplateMode(TemplateMode.HTML);
        //开发时禁用thymeleaf的缓存功能,就能实时看到修改后的界面【项目上线的时候关闭】
        srtr.setCacheable(false);
        //设置用于读取模板资源的新字符编码
        srtr.setCharacterEncoding("UTF-8");
        return srtr;
    }

    //配置模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(SpringResourceTemplateResolver templateResolver,ShiroDialect shiroDialect) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        //为此模板引擎设置单个模板解析器
        templateEngine.setTemplateResolver(templateResolver);
        Set<IDialect> dialectSet = new HashSet<>();
        dialectSet.add(shiroDialect);
        //为这个模板引擎设置一组额外的方言,所有方言都使用它们的默认前缀
        templateEngine.setAdditionalDialects(dialectSet);
        return templateEngine;
    }

    //配置视图解析器并为解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        //指定在呈现视图时要设置到响应中的字符编码
        viewResolver.setCharacterEncoding("UTF-8");
        //设置用于处理模板的模板引擎实例
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }


}

二、spring.xml 配置文件

/**
 * 代替springmvc.xml的配置文件的类
 */
//【表明该类是配置类】表示一个类声明了一个或多个@Bean方法,并且可能会被 Spring 容器处理以在运行时为这些 bean 生成 bean 定义和服务请求
@Configuration
//扫描service层的配置类
@ComponentScan("com.ccbx.service")
//@MapperScan扫描Mapper接口,用value指定扫描的包
@MapperScan("com.ccbx.mapper")
//导入其它的配置类
@Import({DataSourceConfig.class,ShiroConfig.class})
//开启注解事务支持
@EnableTransactionManagement
public class SpringConfig {

    //注册事务管理器
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DruidDataSource druidDataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(druidDataSource);
        return dataSourceTransactionManager;
    }

    //MyBatis整合Spring后,要用SqlSessionFactoryBean对象类管理SqlSession,进而与数据库交互
    //注册SqlSessionFactoryBean
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DruidDataSource druidDataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(druidDataSource);
        //下面配置代替myBatis-config.xml中的package标签,给包下的类统一设置别名
        //sqlSessionFactoryBean.setTypeAliasesPackage("com.ccbx.pojo");
        //指定Mybatis映射文件Mapper.xml的路径
        Resource[] mapperLocations = {
                new ClassPathResource("mappers/StudentMapper.xml"),
                new ClassPathResource("mappers/TeacherMapper.xml"),
                new ClassPathResource("mappers/UserLoginMapper.xml")};
        sqlSessionFactoryBean.setMapperLocations(mapperLocations);
        //设置分页插件
        Interceptor pageInterceptor = new PageInterceptor();
        Properties p = new Properties();
        p.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(p);
        Interceptor[] interceptors = {pageInterceptor};
        sqlSessionFactoryBean.setPlugins(interceptors);
        return sqlSessionFactoryBean;
    }

    //BeanFactory
    //ApplicationContext
    //BeanFactoryPostProcessor

}