SpringMVC-part1

SpringMVC-part1

以前写过spring架构的web项目,只是参照网上的配置文件,进行一些配置。由于各版本内容不不统一,就采用了比较守旧的xml+注解的配置形式。当初对于web程序的理解,tomcat为web服务器,将请求转发给对应转发给java语言处理,然后再将请求结果返回。其中,解析这个请求是由谁完成的?容器tomcat?还是spring?

其实springmvc与tomcat并不是完全分离的,tomcat中的contextInitialized()便是tomcat与springmvc勾搭的地方。

容器(tomcat)将所有符合条件(filter)的请求全部转发给dispatcherservlet。然后dispatcherservlet再进行url匹配分发,其实就是从一个servlet跳转到另一个servlet,即从一个java小程序到另一个java小程序,中间基本不耗时。

最近用java的方式进行配置测试,发现不需要修改任何xml文件包裹web.xml,只需要继承AbstractAnnotationConfigDispatcherServletInitializer,并重写三个方法。由于暂时没有源代码,现记录一下别人的理解。

Servlet3.0以后,Servlet容器(Tomcat)会在classpath下寻找实现了javax.servlet.ServletContainerInitialize接口
的任何类,找到之后用它来初始化Servlet容器。而Spring实现了该接口,实现类为SpringServletContainerInitializer,他会
依次寻找实现了WebApplicationInitializer的任何类,并委派这个类实现配置。后来在开始引入了一个简易的
WebApplicationInitializer实现类,叫做AbstractAnnotationConfigDispatcherServletInitializer。

package config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub

        return new Class<?>[] {RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[] {WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        // TODO Auto-generated method stub
        return new String[] {"/"};
    }

}

关于AbstractAnnotationConfigDispatcherServletInitializer

至于这三个方法及详细说明,明天再补。

猜你喜欢

转载自blog.csdn.net/qq_20996105/article/details/79350179