# springMVC-注解配置 **Repository Path**: liubin2000/springMVC-firstDemo ## Basic Information - **Project Name**: springMVC-注解配置 - **Description**: 完全使用配置类和注解来代替web.xml和spring MVC.xml进行配置的入门项目 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-16 - **Last Updated**: 2021-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring-MVC-完全注解式配置 ## 前言:本文是springMVC的入门级案例,采用完全注解式开发 > versions: > > ​ java - 1.8 > > ​ tomcat - 8.5 > > ​ spring - 5.3.1 > > gitee地址: ## 一、项目依赖 + pom.xml ```xml 1.8 1.8 1.8 war org.springframework spring-webmvc 5.3.1 ch.qos.logback logback-classic 1.2.3 javax.servlet javax.servlet-api 3.1.0 provided org.thymeleaf thymeleaf-spring5 3.0.12.RELEASE com.fasterxml.jackson.core jackson-databind 2.12.4 commons-fileupload commons-fileupload 1.3.1 ``` ## 二、使用Java配置类代替web.xml 和 springMVC.xml ### 1. src文件目录 ``` |-- src |-- main | |-- java | | |-- com | | |-- lb | | |-- mvc | | |-- config | | | |-- SpringConfig.java | | | |-- WebConfig.java | | | |-- WebInit.java | | |-- controller | | | |-- ExceptionController.java | | | |-- TestController.java | | |-- interceptors | | |-- MyInterceptor.java | |-- resources | |-- webapp | |-- WEB-INF | |-- templates | |-- error.html | |-- index.html | |-- success.html |-- test |-- java ``` ### 2.**WebInit类** > 因其继承于**AbstractAnnotationConfigDispatcherServletInitializer**类,因此Tomcat将会自动加载这个类 ``` java public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer { /** * 指定spring的配置类 * * @return */ @Override protected Class[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } /** * 指定SpringMVC的配置类 * * @return */ @Override protected Class[] getServletConfigClasses() { return new Class[]{WebConfig.class}; } /** * 指定DispatcherServlet的映射规则, * * @return */ @Override protected String[] getServletMappings() { return new String[]{"/"}; } /** * 注册过滤器 * * @return */ @Override protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter("UTF-8", true); HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter(); return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter}; } } ``` ### 3. SpringConfig类 > 最基础的mvc项目不用配置该类,仅做个标识 ``` java @Configuration public class SpringConfig { } ``` ### 4. WebConfig类 > ``` > /** > * 该类用于代替SpringMVC的配置文件,可以实现如下功能的配置 > * 1. 注解扫描 2. 视图解析器 3. view-controller 4. default-servlet-handler > * 5. mvc注解驱动 6. 文件上传解析器 7. 异常处理 8.拦截器 > */ > ``` ``` java @Configuration @ComponentScan(basePackages = {"com.lb.mvc"}) // 1. 注解扫描 @EnableWebMvc // 5. mvc注解驱动 public class WebConfig implements WebMvcConfigurer { //4. default-servlet-handler @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } // 8.拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**"); // 拦截所有路径 } // 3. view-controller @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); } // 6. 文件上传解析器 @Bean public CommonsMultipartResolver multipartResolver() { return new CommonsMultipartResolver(); } //7. 异常处理 , 也可以另外写类加上@ControllerAdvice /*@Override public void configureHandlerExceptionResolvers(List resolvers) { SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver(); Properties properties = new Properties(); properties.setProperty("ArithmeticException", "error"); exceptionResolver.setExceptionMappings(properties); exceptionResolver.setExceptionAttribute("exception"); resolvers.add(exceptionResolver); }*/ /** * 配置模板解析器 * * @return */ @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; } /** * 配置模板引擎 * * @param templateResolver 模板解析器 * @return */ @Bean public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); return templateEngine; } /** * 配置视图解析器, thymeleaf * * @param templateEngine 模板引擎 * @return */ @Bean public ViewResolver viewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setOrder(1); viewResolver.setCharacterEncoding("UTF-8"); viewResolver.setTemplateEngine(templateEngine); return viewResolver; } } ``` ### 5. MyInterceptor类 ``` java public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("拦截器配置成功"); 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 { } } ``` ### 6. ExceptionController类 > 异常处理类 ``` java @ControllerAdvice public class ExceptionController { @ExceptionHandler(value = {ArithmeticException.class, NullPointerException.class}) public String test(Exception e, Model model) { model.addAttribute("exception", e); // 将异常类共享到request域中 return "error"; // 转发到error视图 } } ``` ### 7. TestController类 ``` java @Controller public class TestController { @RequestMapping("/testArithmeticException") public String testArithmeticException() { int i = 10 / 0; return "success"; } @RequestMapping("/testNullPointerException") public String testNullPointerException() { Object o = null; System.out.println(o.hashCode()); return "success"; } } ``` ### 8. index、success、error页面 ``` html index

首页

``` ``` html success success ``` ``` html error

``` 别气馁,马上就要成功了,还差最后一步! ## 三、Idea集成Tomcat 完整过程: https://www.jianshu.com/p/7e026b76424e