Spring MVC或Spring Boot配置默認訪問頁面不生效?

相信在開發項目過程當中,設置默認訪問頁面應該都用過。可是有時候設置了卻不起做用。你知道是什麼緣由嗎?今天就來講說我遇到的問題。html

首先說說配置默認訪問頁面有哪幾種方式。web

 

一、tomcat配置默認訪問頁面tomcat

進入 tomcat 的 conf 目錄,編輯 web.xml 文件。在 <web-app></web-app> 添加默認訪問頁面。app

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

首先默認訪問index.html頁面,若是該頁面不存在,則會訪問index.jsp,以此類推。這種方式適合訪問靜態的頁面(也包括JSP)或者說是沒有任何參數的頁面。jsp

 

二、Spring Boot設置index默認頁面編輯器

新建一個類,繼承WebMvcConfigurerAdapter類,並加上@Configuration,此方式在tomcat沒有配置默認訪問頁面的狀況下生效。ide

@Configuration
public class DefalutPage extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers( ViewControllerRegistry registry )
{
registry.addViewController( "/" ).setViewName( "forward:/index.html" );
registry.setOrder( Ordered.HIGHEST_PRECEDENCE );
super.addViewControllers( registry );
}
}

注:在Spring Boot 2.0版本以後編輯器提示已過期,實現WebMvcConfigurer接口便可。code

 

三、配置根節點訪問「/」方式xml

在 Controller 配置一個名爲 "/" 的訪問路徑。當輸入完網址後就會調用。此方式在前面三種都沒有配置的狀況纔會調用。htm

@RequestMapping(value="/")
public String index(){
return "index";
}
}

 

四、Controller 配置index默認頁面

若是tomcat和Spring Boot沒有配置默認訪問頁面,Spring 會主動去尋找 Controller 的 index。若是有則會調用,不然會報404錯誤。

@RequestMapping(value="/index")
public String index(){
return "index";
}

 

優先級:1 > 2 > 3 > 4。由於tomcat的優先級比Spring高,相應因而最高的。以上的配置,都會先去tomcat是否配置默認訪問頁面。第2種方式因爲設置了HIGHEST_PRECEDENCE,除了tomcat的配置給的權限是最高的,因此比三、4兩種優先級高。第3種由於Controller配置了"/",會優先匹配,而不是尋找/index的Controller。

注:若是項目的web.xml沒有配置設置訪問頁面,tomcat也會自動去尋找WebRoot目錄下的index文件。若是要使後面三種方式生效,需保證tomcat沒有配置設置訪問頁面或WebRoot目錄下沒有index文件。

遇到問題:使用了第2種Spring Boot設置默認訪問方式,因爲是使用外部的tomcat,而且tomcat配置了幾個默認訪問頁面。當時對設置默認訪問的優先級沒有系統的瞭解,致使花費了大半天才弄明白。

 

今天,你學會配置默認訪問頁面了嗎?對這幾種方式的優先級是否瞭解呢?

相關文章
相關標籤/搜索