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


相信在開發項目過程中,設置默認訪問頁面應該都用過。但是有時候設置了卻不起作用。你知道是什么原因嗎?今天就來說說我遇到的問題。

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

 

1、tomcat配置默認訪問頁面

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

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

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

 

2、Spring Boot設置index默認頁面

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

@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接口即可。

 

3、配置根節點訪問“/”方式

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

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

 

4、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的配置給的權限是最高的,所以比3、4兩種優先級高。第3種因為Controller配置了"/",會優先匹配,而不是尋找/index的Controller。

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

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM