1. 程式人生 > >關於專案首頁(歡迎頁)跳轉問題

關於專案首頁(歡迎頁)跳轉問題

大家好!小弟入行不久,經驗尚淺。工作中遇到不少問題。絞盡腦汁。費了很大神才找到解決的方法。。不過原因還是有點想不通,,在此先把問題和解決的方法寫上,以後弄懂了原因再附加上


首先呢今天遇到的問題是這樣,專案原先訪問登陸首頁的路徑 如: http://localhost:8088/yitai-ces-web/front/index.html#/login

檔案配置則是

<!-- MVC -->
<mvc:default-servlet-handler />
<mvc:annotation-driven />

<!--將請求資訊轉換為字串 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html</value> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</
value> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <util:list id="beanList"> <ref bean="mappingJacksonHttpMessageConverter"
/> </util:list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 定義JSP檔案的位置 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 定義無需Controllerurl<->view直接對映 --> <mvc:view-controller path="/" view-name="redirect:/loginTo/index"/> <!--Range_For_Spring_Inside_Exception--> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">ExceptionPage</prop> </props> </property> </bean> <!-- 檔案上傳 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
web.xml 部分配置:

<servlet>
  <servlet-name>spring-mvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/META-INF/spring-web/spring-mvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>spring-mvc</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Spring Listener -->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:/META-INF/spring/root.xml</param-value>
</context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>spring.profiles.default</param-name>
  <param-value>production</param-value>
</context-param>

<session-config>
  <session-timeout>20</session-timeout>
</session-config>

以上是部分配置:

讓小弟想不通的事  同樣配置下  在其他的專案中  可以通過訪問地址 http://localhost:8088/yitai-ces-web/  或者  http://localhost:8088/yitai-ces-web/front 直接跳轉到登陸首頁

當然是通過

<mvc:view-controller path="/" view-name="redirect:/loginTo/index"/>
進入controller 層 然後通過方法跳轉至 /webapp/front/index.html ,再由js 跳轉至登陸頁

唯獨其中一個專案使用http://localhost:8088/yitai-ces-web 不能跳轉到登陸首頁 。而使用其他的如http://localhost:8088/yitai-ces-web/front  http://localhost:8088/yitai-ces-web/fss  等都能進入到登陸首頁。。 此時跳至的頁面是webapp/index.html   這就很尷尬了  小弟百思不得其解。


   


經過漫長時間的排查發現 在直接訪問 http://localhost:8088/yitai-ces-web (相當於直接 訪問 / 時)自動的預設訪問了 /index.html  。。。  由於此問題是小弟臨時接手 在檢視各配置和程式碼後,並沒有找到問題所在。可謂是相當的納悶!!

無奈之下只好投機取巧,

由於上面小弟所將的,既然不管怎麼做都會跳入這裡,並且此頁面並沒有其他的地方在使用,索性就在這裡去獲取登陸首頁的地址並跳轉,,但是經過試驗後發現此方法雖然成功跳入了登陸頁,缺帶來了另外一個小問題。 大哭大哭


   最後小弟又將所有的配置和程式碼檢查後發現  在web.xml 檔案中 並沒有配置 welcome-file-list  。再次一瞬間,我突然感覺到春天依然來臨,在光速的噼裡啪啦之下,耗時幾秒以後 配置完成

<welcome-file-list>
  <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

  此時小弟重啟專案之後 發現問題已然解決。。。 

  然而。。小弟不由想起在專案中  並沒有login.jsp  .並且welcome-file-list的工作原理是,按照welcome-file的.list一個一個去檢查是否web目錄下面存在這個檔案,如果存在,繼續下面的工作(或者跳轉到index.html頁面,或者配置有struts的,會直接struts的過濾工作).如上例,先去webcontent(這裡是Eclipse的工程目錄根目錄)下是否真的存在index.html這個檔案,如果不存在去找是否存在index.jsp這個檔案,以此類推。

      還要說的是welcome-file不一定是html或者jsp等檔案,也可以是直接訪問一個action。

      如果配置了servlet的url-pattern是/*,那麼訪問localhost:8080/會匹配到該servlet上,而不是匹配welcome-file-list;如果url-pattern是/(該servlet即為預設servlet),如果其他匹配模式都沒有匹配到,則會匹配welcome-file-list。

       所以此時我的不解是 , 專案中小弟servlet的url-pattern是/ 應先按照其他配置去匹配並跳轉頁面,找不到才會來匹配welcome-file-list 下面的頁面。而小弟專案中在存在/front/index.html 的情況下  卻跳轉至/index.html   並且在配置welcome-file-list後 。  在專案中並不存在 login.jsp 的情況下  還成功的由錯誤的index.html頁面跳轉至登陸首頁。  可能這裡小弟表達的不怎麼清楚。。但是確實存在了這麼一個小疑問。。。


以上的問題是小弟今天遇見的比較怪的問題。。。沒弄懂的地方待小弟解惑以後會補上答案   。 也歡迎各位大大能為小弟解惑一下   ,同時希望在將來能為出現同樣問題的小夥伴一點小小的助力!!!