SpringMvc的第五天-SSM整合(全注解版)

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的出现,导致注解版非常的方便。因此也就被大多数人所使用


一、配置前端控制器和post请求的中文乱码

配置类继承 AbstractAnnotationConfigDispatcherServletInitializer,

1.重写getRootConfigClasses方法  

用于配置普通类的配置文件

2.重写getServletConfigClasses方法

重写mvc类的配置文件

3.重写getServletMappings方法

设置前端控制器DispatcherServlet  那些资源进入  

4.Post请求的中文乱码问题

重写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("过滤了");
	}
	
	

}

二、spring配置文件的类

1.常用注解

@Configuration

声明该类是一个配置类,并且交给了spring管理

SpringMvc的第五天-SSM整合(全注解版)_第1张图片

@ComponentScan (base-package="")

相当于 

@EnableAspectJAutoProxy 

 相当于 

@MapperScan(base-package="")

 这个是mybatis-spring整合的mapper发现映射器的一种方式  

@EnableTransactionManagement

 开启事务管理   

 向当与

 @Bean

配置第三方的类交给spring管理  

2.实例

   2.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.2 mybatis与spring整合(将mapper交给spring管理)

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")

 2.3 事务管理

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";
		}


三、SpringMvc配置文件的类

 

SpringMvc的第五天-SSM整合(全注解版)_第2张图片

1.常用注解

 @EnableWebMvc 

使用最新的处理器适配器和处理器映射器

相当于  

2.配置相关功能
 

 2.1 拦截器 

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");
        
    }

2.2 视图解析器

//视图解析器
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/", ".jsp");
  	}

 2.3 多媒体视图解析器

//多媒体视图解析器  名字一定为multipartResolver
	@Bean(name = "multipartResolver")
	public CommonsMultipartResolver  getCommonsMultipartResolver() {
		CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver();
		//设置一些参数
		commonsMultipartResolver.setDefaultEncoding("UTF-8");
		return commonsMultipartResolver;
	}

注意:id 一定要是multipartResolver

  2.4 静态资源放行

//静态资源
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
      registry.addResourceHandler("/css/**","/js/**","/images/**").addResourceLocations("/css/","/js/","/images/");
	}

2.5 全局异常处理器 

1.创建类继承HandlerExceptionResolver接口

2.将类交给spring管理

3.添加进入

    @Autowired
	private MyHandleExceptionResolver myHandException;
	
//全局异常处理器  --注解要进行加入  ---xml无需设置  只要交给spring管理即可
	@Override
	public void configureHandlerExceptionResolvers(List resolvers) {
	   resolvers.add(myHandException);
	}

2.6 自定义类型转换器 

1.创建自定义类继承Coverter接口

2.将类交给spring管理

3.配置

@Autowired 
	private DateFormatConverter dataFormatConverter;
	//自定义类型转换  
	@Override
	public void addFormatters(FormatterRegistry registry) {
		registry.addConverter(dataFormatConverter);
	}

你可能感兴趣的:(暑期四阶段学习笔记,java,spring,后端)