SpringMvc的第五天-SSM整合(全注解版)
目录
前言
一、配置前端控制器和post请求的中文乱码
1.重写getRootConfigClasses方法
2.重写getServletConfigClasses方法
3.重写getServletMappings方法
4.Post请求的中文乱码问题
二、spring配置文件的类
1.常用注解
@Configuration
@ComponentScan (base-package="")
@EnableAspectJAutoProxy
@MapperScan(base-package="")
@EnableTransactionManagement
@Bean
2.实例
2.1 配置第三发类交给spring管理
2.2 mybatis与spring整合(将mapper交给spring管理)
2.3 事务管理
三、SpringMvc配置文件的类
1.常用注解
@EnableWebMvc
2.配置相关功能
2.1 拦截器
2.2 视图解析器
2.3 多媒体视图解析器
2.4 静态资源放行
2.5 全局异常处理器
2.6 自定义类型转换器
全注解版是将之前的xml配置去除掉,利用java类来进行配置,其实有人到这里会提出这样的问题,那用java类进行配置,不是有了耦合关系了嘛,其实这个问题以前是两个流派,一个是使用xml文件进行配置,一个是使用全注解进行配置,但是由于springboot的出现,导致注解版非常的方便。因此也就被大多数人所使用
配置类继承 AbstractAnnotationConfigDispatcherServletInitializer,
用于配置普通类的配置文件
重写mvc类的配置文件
设置前端控制器DispatcherServlet 那些资源进入
重写onStartup方法
使用springweb提供的过滤器
注意:一定要调用父类的这个方法 否则服务器无法启动
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
CharacterEncodingFilter characterEncodingFilter =new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceRequestEncoding(true);
characterEncodingFilter.setForceResponseEncoding(true);
//添加
servletContext.addFilter("characterEncodingFilter", characterEncodingFilter).addMappingForUrlPatterns(null, true, "/*");
}
实例:
package com.sofwin.config;
import javax.servlet.FilterRegistration.Dynamic;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//普通的配置文件类
@Override
protected Class>[] getRootConfigClasses() {
return new Class[] {RootConfig.class};
}
//mvc的配置文件类
@Override
protected Class>[] getServletConfigClasses() {
return new Class[] {MvcConfig.class};
}
//除了处理jdp都进入到前端控制器 DispatcherServlet
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
//用于设置post请求的中文乱码-出现问题了
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
CharacterEncodingFilter characterEncodingFilter =new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceRequestEncoding(true);
characterEncodingFilter.setForceResponseEncoding(true);
//添加
servletContext.addFilter("characterEncodingFilter", characterEncodingFilter).addMappingForUrlPatterns(null, true, "/*");
System.out.println("过滤了");
}
}
@Configuration
声明该类是一个配置类,并且交给了spring管理
相当于
相当于
这个是mybatis-spring整合的mapper发现映射器的一种方式
开启事务管理
向当与
配置第三方的类交给spring管理
@Bean("dataSource")
public DruidDataSource getDataSource() {
DruidDataSource dataSource =new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&nullCatalogMeansCurrent=true");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
1.将datasource交给spring管理
@Bean("dataSource") public DruidDataSource getDataSource() { DruidDataSource dataSource =new DruidDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&nullCatalogMeansCurrent=true"); dataSource.setUsername("root"); dataSource.setPassword("root"); return dataSource; }
2.创建SqlSessionFactoryBean工厂
@Bean("sqlSessionFactoryBean") public SqlSessionFactoryBean getSqlSessionFactoryBean() { SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(getDataSource()); Resource resource=new ClassPathResource("config.xml"); sqlSessionFactoryBean.setConfigLocation(resource); return sqlSessionFactoryBean; }
这里可以引用mybatis的全局配置文件,或者设置全局配置文件中的属性
3.在类中使用@MapperScan(base-package="")
设置要扫描的mapper的路径 例如 @MapperScan("com.sofwin.mapper")
1.创建数据源,交给spring管理
@Bean("dataSource") public DruidDataSource getDataSource() { DruidDataSource dataSource =new DruidDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&nullCatalogMeansCurrent=true"); dataSource.setUsername("root"); dataSource.setPassword("root"); return dataSource; }
2.创建事务管理平台
@Bean("transactionMananger") public JdbcTransactionManager getJdbcTransactionManager() { JdbcTransactionManager manager = new JdbcTransactionManager(); manager.setDataSource(getDataSource()); return manager; }
3.开启事务的管理
@EnableTransactionManagement
4.方法中利用@Transactional 修饰
@Autowired private UserService service; @Transactional(propagation = Propagation.REQUIRED) @ResponseBody @GetMapping("/tran") public String test05() { BUser user=new BUser(); user.setId(100); user.setLoginName("likeji"); service.insertUser(user); int i=1/0; service.deleteUser(user.getId()); return "success"; }
使用最新的处理器适配器和处理器映射器
相当于
1.创建拦截器类继承HandlerInterceptor接口 实现三个方法
2.将拦截器交给spring管理
3.设置拦截器
//注入拦截器 @Autowired private GetorInterceptor getorInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { //设置拦截器拦截所有 ---只放行/login的请求 registry.addInterceptor(getorInterceptor).addPathPatterns("/**") .excludePathPatterns("/login","/**/*.css","/**/*.jd","/**/*.png","/**/*.gif","/**/*.jpg"); }
//视图解析器 @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/", ".jsp"); }
//多媒体视图解析器 名字一定为multipartResolver @Bean(name = "multipartResolver") public CommonsMultipartResolver getCommonsMultipartResolver() { CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver(); //设置一些参数 commonsMultipartResolver.setDefaultEncoding("UTF-8"); return commonsMultipartResolver; }
注意:id 一定要是multipartResolver
//静态资源 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/css/**","/js/**","/images/**").addResourceLocations("/css/","/js/","/images/"); }
1.创建类继承HandlerExceptionResolver接口
2.将类交给spring管理
3.添加进入
@Autowired private MyHandleExceptionResolver myHandException; //全局异常处理器 --注解要进行加入 ---xml无需设置 只要交给spring管理即可 @Override public void configureHandlerExceptionResolvers(List
resolvers) { resolvers.add(myHandException); }
1.创建自定义类继承Coverter接口
2.将类交给spring管理
3.配置
@Autowired private DateFormatConverter dataFormatConverter; //自定义类型转换 @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(dataFormatConverter); }