Chapter 11: SpringMVC Annotation Configuration

1. Annotate configuration SpringMVC

The purpose is to use configuration classes and annotations to replace the functions of web.xml and Spring.MVC configuration files

1. Create an initialization class instead of web.xml

  • In the Servlet3.0 environment, the container will look for a class that implements the javax.servlet.ServletContainerInitializer interface in the class path, and if found, use it to configure the Servlet container.
  • Spring provides an implementation of this interface, named SpringServletContainerInitializer, which in turn looks for classes that implement WebApplicationInitializer and delegates the configuration tasks to them.
  • Spring 3.2 introduces a convenient basic implementation of WebApplicationInitializer named AbstractAnnotationConfigDispatcherServletInitializer. When our class extends AbstractAnnotationConfigDispatcherServletInitializer and deploys it to a Servlet3.0 container, the container will automatically discover it and use it to configure the Servlet context.

①Create a Module and configure pom.xml

② Create webapp and WEB-INF folders

③Create a configuration class

2. Create a WebInit class instead of web.xml and inherit AbstractAnnotationConfigDispatcherServletInitializer

①WebInit

public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
   /**
    * 指定spring的配置类
    */
   @Override
   protected Class<?>[] getRootConfigClasses() {
      return new Class[]{SpringConfig.class};
   }

   /**
    * 指定springMVC的配置类
    */
   @Override
   protected Class<?>[] getServletConfigClasses() {
      return new Class[]{WebConfig.class};
   }

   /**
    * 指定DispatcherServlet的映射规则。即url-pattern
    */
   @Override
   protected String[] getServletMappings() {
      return new String[]{"/"};
   }
   /**
    * 添加过滤器
    */
   @Override
   protected Filter[] getServletFilters() {
      CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
      encodingFilter.setEncoding("UTF-8");
      encodingFilter.setForceRequestEncoding(true);
      HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
      return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
   }
}

 ② Create SpringConfig and WebConfig configuration classes

@Configuration
public class SpringConfig {
}
@Configuration
public class WebConfig {
}

3. WebConfig instead of SpringMVC configuration file

  • Scan component, view resolver, view-controller, default-servlet-handler
  • Mvc annotation driver, file upload parser, exception handling, interceptor

configuration template

//当前类标识一个配置类
@Configuration
// 开启扫描组件
@ComponentScan ("com.wzl.mvc.controller")
//开启MVC注解驱动
@EnableWebMvc
public class WebConfig {


   //配置生成模板解析器
   @Bean
   public ITemplateResolver templateResolver() {
      WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
      // ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过WebApplicationContext 的方法获得
      ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(
            webApplicationContext.getServletContext());
      templateResolver.setPrefix("/WEB-INF/templates/");
      templateResolver.setSuffix(".html");
      templateResolver.setCharacterEncoding("UTF-8");
      templateResolver.setTemplateMode(TemplateMode.HTML);
      return templateResolver;
   }

   //生成模板引擎并为模板引擎注入模板解析器
   @Bean
   public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
      SpringTemplateEngine templateEngine = new SpringTemplateEngine();
      templateEngine.setTemplateResolver(templateResolver);
      return templateEngine;
   }

   //生成视图解析器并未解析器注入模板引擎
   @Bean
   public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
      ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
      viewResolver.setCharacterEncoding("UTF-8");
      viewResolver.setTemplateEngine(templateEngine);
      return viewResolver;
   }
}

②Test Controller controller

 //Visit the home page

@Controller
public class TestController {
   @RequestMapping("/")
   public String index(){
      return "index";
   }
}

4. Configure others and realize other configurations.

Implements the interface implements WebMvcConfigurer

public class WebConfig implements WebMvcConfigurer{
}

Configure default servlet available, default-servlet-handler

Ctrl+o to find

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
   configurer.enable();
}

Configure interceptors

① Create an interceptor

public class TestInterceptor implements HandlerInterceptor {
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      System.out.println("preHandle");
      return true;
   }

   @Override
   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
   }

   @Override
   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
   }
}

 ②In WebConfig

@Override
public void addInterceptors(InterceptorRegistry registry) {
   TestInterceptor testInterceptor = new TestInterceptor();
   // 添加拦截路径
   registry.addInterceptor(testInterceptor).addPathPatterns("/admin/**");
}

 ③ Add in the controller

@RequestMapping("/admin/index")
public String index1(){
   return "index";
}

 ④ test

Configure view-controller

@Override
public void addViewControllers(ViewControllerRegistry registry) {
   registry.addViewController("/").setViewName("index");
}

 jump to main page

 

Configuration file upload

//文件上传解析器
@Bean
public MultipartResolver multipartResolver(){
   CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
   return commonsMultipartResolver;
}

Configure exception parser

@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
   SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
   Properties properties = new Properties();
   properties.setProperty("java.lang.ArithmeticException","error");
   //设置异常映射
   exceptionResolver.setExceptionMappings(properties);
   exceptionResolver.setExceptionAttribute("ex");
   resolvers.add(exceptionResolver);
}

Guess you like

Origin blog.csdn.net/jbkjhji/article/details/131088425