(三)Web模块:【6】定制与接管 SpringMVC

一、配置文件方式

  以前在使用 SpringMVC 时,我们可以在配置文件中进行配置:

  例如:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--将SpringMVC处理不了的请求交给tomcat;静态资源 就可以访问 -->
    <mvc:default-servlet-handler/>
    <!-- SpringMVC的高级功能开启 -->
    <mvc:annotation-driven />

    <!--<mvc:interceptors>   &lt;!&ndash; 配置拦截器&ndash;&gt;-->

    <!--</mvc:interceptors>-->

    <!--<mvc:view-controller path=""/>-->
</beans>

二、无配置文件方式

  在 Servlet整合了 SpringMVC 后,就没有了配置文件,此时就可以通过配置类的方式来进行定制SpringMVC。

  定义SpringMVC:

  (1)@EnableWebMvc:开启SpringMVC定制配置功能;    <mvc:annotation-driven/>;

  (2)配置组件(视图解析器、视图映射、静态资源映射、拦截器。。。)    extends WebMvcConfigurerAdapter

三、示例

  SpringMVC 的配置类:

@ComponentScan(value="com.njf", includeFilters={
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes={Controller.class})
}, useDefaultFilters=false)
@Configuration
@EnableWebMvc //开启SpringMVC定制配置功能
public class SpringMVCConfig extends WebMvcConfigurerAdapter {

    //定制

    //视图解析器
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        //默认所有的页面都从 /WEB-INF/ xxx .jsp
        //registry.jsp();
        registry.jsp("/WEB-INF/views/", ".jsp");
    }

    //静态资源访问
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    //拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //super.addInterceptors(registry);
        registry.addInterceptor(new MyFirstInterceptor()).addPathPatterns("/**");
    }
}

   创建自定义拦截器:

public class MyFirstInterceptor implements HandlerInterceptor {

    //目标方法运行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("preHandle..."+request.getRequestURI());
        return true;
    }


    //目标方法执行正确以后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("postHandle...");
    }


    //页面响应以后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("afterCompletion...");
    }

}

  容器启动加载的类

//web容器启动的时候创建对象;调用方法来初始化容器以前前端控制器
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {


    //获取根容器的配置类;(Spring的配置文件)   父容器;
    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[]{RootConfig.class};
    }


    //获取web容器的配置类(SpringMVC配置文件)  子容器;
    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[]{AppConfig.class};
    }


    //获取DispatcherServlet的映射信息
    //  /:拦截所有请求(包括静态资源(xx.js,xx.png)),但是不包括*.jsp;
    //  /*:拦截所有请求;连*.jsp页面都拦截;jsp页面是tomcat的jsp引擎解析的;
    @Override
    protected String[] getServletMappings() {
        // TODO Auto-generated method stub
        return new String[]{"/"};
    }
}

  MVC Config 参考文档

 

原文地址:https://www.cnblogs.com/niujifei/p/15593200.html