• Java框架 SpringMVC--完全注解配置


    注解配置SpringMVC

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

            在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类, 如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为 SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为 AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了 AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

    1. public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    2. /**
    3. * 指定 spring 的配置类
    4. *
    5. * @return 返回值为一个 spring 配置类数组
    6. */
    7. @Override
    8. protected Class[] getRootConfigClasses() {
    9. return new Class[]{SpringConfig.class};
    10. }
    11. /**
    12. * 指定 SpringMVC 的配置类
    13. *
    14. * @return 返回值为一个 SpringMVC 配置类数组
    15. */
    16. @Override
    17. protected Class[] getServletConfigClasses() {
    18. return new Class[]{WebConfig.class};
    19. }
    20. /**
    21. * 指定 DispatcherServlet 的映射规则,即url-pattern
    22. *
    23. * @return 返回值为一个字符串(url-pattern)数组
    24. */
    25. @Override
    26. protected String[] getServletMappings() {
    27. return new String[]{"/"};
    28. }
    29. /**
    30. * 添加过滤器
    31. *
    32. * @return 返回值为 过滤器对象 数组
    33. */
    34. @Override
    35. protected Filter[] getServletFilters() {
    36. // 设置编码过滤器
    37. CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    38. characterEncodingFilter.setEncoding("UTF-8");
    39. characterEncodingFilter.setForceEncoding(true);
    40. // 设置请求过滤器
    41. HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
    42. return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
    43. }
    44. }

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

    1. /**
    2. * 代替spring的配置文件
    3. */
    4. @Configuration // 声明配置类
    5. public class SpringConfig {
    6. //ssm整合之后,spring的配置信息写在此类中
    7. }

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

    1. /**
    2. * 代替SpringMVC的配置文件
    3. * 组件扫描,视图解释器,默认的Servlet,MVC注解驱动,
    4. * 视图控制器,文件上传解析器,拦截器,异常解析器
    5. */
    6. @Configuration // 声明配置类
    7. @ComponentScan("com.chenyixin.ssm")
    8. @EnableWebMvc // 开启MVC注解驱动
    9. public class WebConfig implements WebMvcConfigurer {
    10. /**
    11. * 使用默认的servlet处理静态资源
    12. *
    13. * @param configurer
    14. */
    15. @Override
    16. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    17. configurer.enable();
    18. }
    19. /**
    20. * 文件上传解析器
    21. *
    22. * @return
    23. */
    24. @Bean //@Bean 注解可以将标识的方法的返回值作为 bean 进行管理
    25. public CommonsMultipartResolver multipartResolver() {
    26. return new CommonsMultipartResolver();
    27. }
    28. /**
    29. * 配置视图控制器
    30. *
    31. * @param registry
    32. */
    33. @Override
    34. public void addViewControllers(ViewControllerRegistry registry) {
    35. registry.addViewController("/").setViewName("index");
    36. }
    37. /**
    38. * 配置拦截器
    39. *
    40. * @param registry
    41. */
    42. @Override
    43. public void addInterceptors(InterceptorRegistry registry) {
    44. FirstInterceptor firstInterceptor = new FirstInterceptor();
    45. registry.addInterceptor(firstInterceptor).addPathPatterns("/**")
    46. .excludePathPatterns("/aaa");
    47. }
    48. /**
    49. * 配置异常映射
    50. *
    51. * @param resolvers
    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. //设置异常映射
    59. exceptionResolver.setExceptionMappings(prop);
    60. // 设置共享异常信息的键
    61. exceptionResolver.setExceptionAttribute("ex");
    62. resolvers.add(exceptionResolver);
    63. }
    64. /**
    65. * 以下配置视图解析器
    66. * @return
    67. */
    68. // 配置生成模板解析器
    69. @Bean
    70. public ITemplateResolver templateResolver() {
    71. WebApplicationContext webApplicationContext =
    72. ContextLoader.getCurrentWebApplicationContext();
    73. // ServletContextTemplateResolver需要一个ServletContext作为构造参数,
    74. // 可通过 WebApplicationContext 的方法获得
    75. ServletContextTemplateResolver templateResolver =
    76. new ServletContextTemplateResolver(webApplicationContext.getServletContext());
    77. templateResolver.setPrefix("/WEB-INF/templates/");
    78. templateResolver.setSuffix(".html");
    79. templateResolver.setCharacterEncoding("UTF-8");
    80. templateResolver.setTemplateMode(TemplateMode.HTML);
    81. return templateResolver;
    82. }
    83. // 生成模板引擎并为模板引擎注入模板解析器
    84. @Bean
    85. public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
    86. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    87. templateEngine.setTemplateResolver(templateResolver);
    88. return templateEngine;
    89. }
    90. // 生成视图解析器并未解析器注入模板引擎
    91. @Bean
    92. public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
    93. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    94. viewResolver.setCharacterEncoding("UTF-8");
    95. viewResolver.setTemplateEngine(templateEngine);
    96. return viewResolver;
    97. }
    98. }

    过滤器:

    1. public class FirstInterceptor implements HandlerInterceptor {
    2. @Override
    3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    4. System.out.println("FirstInterceptor --> preHandle");
    5. return true;
    6. }
    7. @Override
    8. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    9. System.out.println("FirstInterceptor --> postHandle");
    10. }
    11. @Override
    12. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    13. System.out.println("FirstInterceptor --> afterCompletion");
    14. }
    15. }

    4、测试功能(资源代码)

    index.html:

    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>Indexh1>
    9. <a th:href="@{/test/hello}">测试a>
    10. body>
    11. html>

    success.html:

    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>successh1>
    9. body>
    10. html>

    error.html:

    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>successh1>
    9. body>
    10. html>

    conttoller层代码:

    1. @Controller
    2. public class TestController {
    3. @RequestMapping("test/hello")
    4. public String hello() {
    5. // System.out.println(1/0);
    6. return "success";
    7. }
    8. }

  • 相关阅读:
    PlantUML 绘制时序图
    【Linux】高级IO模型
    【新版】系统架构设计师 - 层次式架构设计理论与实践
    [C++]继承
    时间序列分析 | SVM支持向量机时间序列预测(Matlab完整程序)
    Hudi 数据湖的插入,更新,查询,分析操作示例
    JS-页面截图下载为pdf
    vscode文件夹折叠问题
    展会邀请丨虹科诚邀您9月15-16日于广州参加2023第14届全国药品质量安全大会
    #5机器学习(西瓜书)自学记录
  • 原文地址:https://blog.csdn.net/weixin_65637841/article/details/126492084