DispatchServlet

版权声明:本文为博主原创文章,转载请注明出处!!!!!!!!!! https://blog.csdn.net/qq_21434959/article/details/84530945

介绍

dispatchServlet 俗称前端控制器,springmvc处理一切前端请求的入口所在,包括两个部分 Servlet WebApplicationContextRoot WebApplicationContext

官方图片如下:
在这里插入图片描述

DispatchServlet注解式配置

在servlet2.5 时,原有的配置是在web.xml中定义的,定义如下:

<web-app>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>app1</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/app1-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>app1</servlet-name>
        <url-pattern>/app1/*</url-pattern>
    </servlet-mapping>

</web-app>

注解式配置

我们知道了是DispatcherServlet是两部分组成的,

  • RootConfig:加载除了Controller 的所有bean 配置
  • AppConfig : 在家所有的Controller配置

注:两者正好好所有的bean 都加载了ServletConfig,就是用于加载Controller 处理请求的,还有它的一些附有属性:处理器适配器(待补充)、处理器映射器(HandlerMapper)、试图解析器(viewResover)。

AppConfig:必须继承WebMvcConfigurerAdapter 或者实现WebMvcConfigurer接口

MyWebAppInitializer


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

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

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

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

}

RootConfig

//Spring的容器不扫描controller;父容器
@ComponentScan(value="com.atguigu",excludeFilters={
		@Filter(type=FilterType.ANNOTATION,classes={Controller.class})
})
public class RootConfig {

}

AppConfig

//SpringMVC只扫描Controller;子容器
//useDefaultFilters=false 禁用默认的过滤规则;
@ComponentScan(value = "com.atguigu", includeFilters = {
        @Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
}, useDefaultFilters = false)
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {

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

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

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

}

controller


@Controller
public class HelloController {
	
	@Autowired
	HelloService helloService;
	
	
	@ResponseBody
	@RequestMapping("/hello")
	public String hello(){
		String hello = helloService.sayHello("tomcat..");
		return hello;
	}
	
	//  /WEB-INF/views/success.jsp
	@RequestMapping("/suc")
	public String success(){
		return "success";
	}
	

}

启动项目

访问:http://localhost:8080/hello

猜你喜欢

转载自blog.csdn.net/qq_21434959/article/details/84530945