注:常用的web配置和spring配置。。。(持续补充中)
早期的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; } }
/** * 代替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 }