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
至于这三个方法及详细说明,明天再补。