• 注解配置SpringMVC


    目录

    一、创建初始化类,代替web.xml

    二、创建SpringConfig配置类,代替spring的配置文件

    三、创建WebConfig配置类,代替SpringMVC的配置文件

    四、测试功能


    使用配置类和注解代替web.xml和SpringMVC配置文件的功能

    一、创建初始化类,代替web.xml

    • 在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类, 如果找到的话就用它来配置Servlet容器。
    • Spring提供了这个接口的实现,名为 SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。
    • Spring3.2引入了一个便利的WebApplicationInitializer基础实现,
    • 名为 AbstractAnnotationConfigDispatcherServletInitializer
    • 当我们的类扩展了 AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。
    1. package com.atguigu.config;
    2. import org.springframework.web.filter.CharacterEncodingFilter;
    3. import org.springframework.web.filter.HiddenHttpMethodFilter;
    4. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    5. import javax.servlet.Filter;
    6. /**
    7. * 用来代替web.xml
    8. */
    9. public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    10. @Override
    11. //设置一个配置类,代替Spring的配置文件
    12. protected Class[] getRootConfigClasses() {
    13. return new Class[]{SpringConfig.class};
    14. }
    15. @Override
    16. //设置一个配置类,代替SpringMVC的配置文件
    17. protected Class[] getServletConfigClasses() {
    18. return new Class[]{WebConfig.class};
    19. }
    20. @Override
    21. //设置SpringMVC的前端控制器DispatcherServlet的url-pattern
    22. protected String[] getServletMappings() {
    23. return new String[]{"/"};
    24. }
    25. @Override
    26. //设置当前的过滤器
    27. protected Filter[] getServletFilters() {
    28. //创建编码过滤器
    29. CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    30. characterEncodingFilter.setEncoding("UTF-8");
    31. characterEncodingFilter.setForceEncoding(true);
    32. //创建处理请求方式的过滤器
    33. HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
    34. return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};
    35. }
    36. }

    二、创建SpringConfig配置类,代替spring的配置文件

    1. import org.springframework.context.annotation.Configuration;
    2. /**
    3. * 代替Spring的配置文件
    4. */
    5. //ssm整合之后,spring的配置信息写在此类中
    6. @Configuration//将类标识为配置类
    7. public class SpringConfig {
    8. }

    三、创建WebConfig配置类,代替SpringMVC的配置文件

    1. package com.atguigu.config;
    2. import com.atguigu.interceptor.FirstInterceptor;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.ComponentScan;
    5. import org.springframework.context.annotation.Configuration;
    6. import org.springframework.web.context.ContextLoader;
    7. import org.springframework.web.context.WebApplicationContext;
    8. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
    9. import org.springframework.web.servlet.HandlerExceptionResolver;
    10. import org.springframework.web.servlet.ViewResolver;
    11. import org.springframework.web.servlet.config.annotation.*;
    12. import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
    13. import org.thymeleaf.spring5.SpringTemplateEngine;
    14. import org.thymeleaf.spring5.view.ThymeleafViewResolver;
    15. import org.thymeleaf.templatemode.TemplateMode;
    16. import org.thymeleaf.templateresolver.ITemplateResolver;
    17. import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
    18. import java.util.List;
    19. import java.util.Properties;
    20. /**
    21. * 代替SpringMVC的配置文件:
    22. * 扫描(控制层)组件、(Thymeleaf)视图解析器、
    23. * 默认的servlet(处理静态资源)、(开启)mvc的注解驱动
    24. * 视图控制器(view-controller)、文件上传解析器、拦截器、异常解析器
    25. */
    26. @Configuration//将类标识为配置类
    27. @ComponentScan("com.atguigu.controller")//扫描组件
    28. @EnableWebMvc//开启mvc的注解驱动
    29. public class WebConfig implements WebMvcConfigurer {
    30. @Override
    31. //默认的servlet处理静态资源
    32. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    33. configurer.enable();
    34. }
    35. //视图控制器
    36. @Override
    37. public void addViewControllers(ViewControllerRegistry registry) {
    38. registry.addViewController("/").setViewName("index");
    39. }
    40. //文件上传解析器
    41. @Bean
    42. //@Bean注解可以将标识的方法的返回值作为bean,bean的id为方法的方法名
    43. public CommonsMultipartResolver multipartResolver(){
    44. return new CommonsMultipartResolver();
    45. }
    46. //拦截器
    47. @Override
    48. public void addInterceptors(InterceptorRegistry registry) {
    49. FirstInterceptor firstInterceptor = new FirstInterceptor();
    50. registry.addInterceptor(firstInterceptor).addPathPatterns("/**").excludePathPatterns("/abc");
    51. }
    52. //异常解析器
    53. @Override
    54. public void configureHandlerExceptionResolvers(List resolvers) {
    55. SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
    56. Properties prop = new Properties();
    57. prop.setProperty("java.lang.ArithmeticException","error");
    58. exceptionResolver.setExceptionMappings(prop);
    59. exceptionResolver.setExceptionAttribute("ex");
    60. resolvers.add(exceptionResolver);
    61. }
    62. //配置生成模板解析器
    63. @Bean
    64. public ITemplateResolver templateResolver() {
    65. WebApplicationContext webApplicationContext =
    66. ContextLoader.getCurrentWebApplicationContext();
    67. // ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过
    68. // WebApplicationContext 的方法获得
    69. ServletContextTemplateResolver templateResolver = new
    70. ServletContextTemplateResolver(
    71. webApplicationContext.getServletContext());
    72. templateResolver.setPrefix("/WEB-INF/templates/");
    73. templateResolver.setSuffix(".html");
    74. templateResolver.setCharacterEncoding("UTF-8");
    75. templateResolver.setTemplateMode(TemplateMode.HTML);
    76. return templateResolver;
    77. }
    78. //生成模板引擎并为模板引擎注入模板解析器
    79. @Bean
    80. public SpringTemplateEngine templateEngine(ITemplateResolver
    81. templateResolver) {
    82. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    83. templateEngine.setTemplateResolver(templateResolver);
    84. return templateEngine;
    85. }
    86. //生成视图解析器并未解析器注入模板引擎
    87. @Bean
    88. public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
    89. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    90. viewResolver.setCharacterEncoding("UTF-8");
    91. viewResolver.setTemplateEngine(templateEngine);
    92. return viewResolver;
    93. }
    94. }

    创建FirstInterceptor 

    1. import org.springframework.web.servlet.HandlerInterceptor;
    2. import org.springframework.web.servlet.ModelAndView;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. public class FirstInterceptor implements HandlerInterceptor {
    6. @Override
    7. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    8. return true;
    9. }
    10. @Override
    11. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    12. HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    13. }
    14. @Override
    15. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    16. HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    17. }
    18. }

    四、测试功能

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>首页title>
    6. head>
    7. <body>
    8. <h1>index.htmlh1>
    9. body>
    10. html>

     

  • 相关阅读:
    【cmake】cmake应用:安装和打包
    悬架模糊控制
    MCE | 靶向 cGAS-STING 通路或可治疗渐冻症
    四旋翼飞行器基本模型(Matlab&Simulink)
    USBCANFD-200u配置与数据收发控制
    计算机考研面试汇总
    麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包
    Random Forest,AdaBoost(adaptive boosting),GB (Gradient Boost), LightGBM
    【MySQL用法】MySQL中大于,大于等于,小于,小于等于的转义写法
    【Flutter】One or more plugins require a higher Android SDK version.
  • 原文地址:https://blog.csdn.net/m0_52982868/article/details/126410917