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

至於這三個方法及詳細說明,明天再補。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章