springmvc注解开发

眉间皱痕 提交于 2019-12-05 02:43:57

ps : 这东西比较简单,用来为我们使用springboot打基础

[TOC]

一 : 工程搭建

(一) 导包

<!-- servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!-- spring -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.1.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.7.RELEASE</version>
</dependency>

<!-- logback -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.2.3</version>
</dependency>

(二) 日志配置

  • logback.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
            <resetJUL>true</resetJUL>
        </contextListener>
    
        <jmxConfigurator/>
    
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>logback: %d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- 将springweb下面的包设置成debug,报错信息会比较全面 -->
        <logger name="org.springframework.web" level="debug"/>
    
        <root level="info">
            <appender-ref ref="console" />
        </root>
    </configuration>
    

(三) web配置

  1. WebApplicationInitializerSpring 提供用来配置Servlet 3.0+配置的接口,从而实现了替代web.xml的位置。实现此接口将会自动被SpringServletContainerInitializer (用来启动Servlet3.0容器)获取到。

  2. 新建WebApplicationContext,注册配置类,并将其和当前servletContext关联。

  3. 注册Spring MVCDispatcherServlet

    public class WebInitializer implements WebApplicationInitializer {
    
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            AnnotationConfigWebApplicationContext context = 
                new AnnotationConfigWebApplicationContext();
            context.register(SpringMvcConfig.class);
            context.setServletContext(servletContext);
    
            ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
            dispatcher.addMapping("/");
            dispatcher.setLoadOnStartup(1);
    
        }
    }
    

(四) springmvc配置

  • @EnableWebMvc会开启一些默认配置,比如ViewResolverMessageConverter

  • 注意 : 这里的视图解析器(springmvc的核心渲染机制)无论使用哪个实现类,其方法名(也就是id)要写其接口的名字

    @Configuration
    @EnableWebMvc
    @ComponentScan("club.info.springmvc")
    public class SpringMvcConfig {
    
        /*
        视图解析器
         */
        @Bean
        public InternalResourceViewResolver viewResolver(){
            return new InternalResourceViewResolver(){{
               setPrefix("/");
               setSuffix(".jsp");
               setViewClass(JstlView.class);
            }};
        }
    }
    

(五) 页面

  • index.jsp

    <html>
        <body>
            <h2>Hello World!</h2>
        </body>
    </html>
    

二 : 基本配置

  • springmvc中的一些定制配置需要我们继承一个类(WebMvcConfigurerAdapter)
  • 并且在配置类上标注@EnableWebMvc

(一) 静态资源映射

@Configuration
@EnableWebMvc
@ComponentScan("club.info.springmvc")
public class SpringMvcConfig implements WebMvcConfigurer {
    
    /*
    静态资源映射
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**").addResourceLocations("classpath:/img/");
    }
}

(二) 拦截器

  • 自定义拦截器

    public class HelloInterceptor 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 {
            System.out.println("后置...");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, 
                                    HttpServletResponse response, 
                                    Object handler, 
                                    Exception ex) throws Exception {
            System.out.println("完成...");
        }
    }
    
  • 配置拦截器

    @Configuration
    @EnableWebMvc
    @ComponentScan("club.info.springmvc")
    public class SpringMvcConfig implements WebMvcConfigurer {
    
        /*
        拦截器
         */
        @Bean
        public HelloInterceptor helloInterceptor(){
            return new HelloInterceptor();
        }
    
        /*
        配置拦截器
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(helloInterceptor()).addPathPatterns("/hello");
        }
    }
    

(三) @ControllerAdvice

(四) 其他

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!