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
至於這三個方法及詳細說明,明天再補。