2013-01-13 119 views
1

我正在使用Java代碼處理Web應用程序,我通過使每個頁面從一個servlet類開始來更改我的代碼。CSS樣式停止工作?

Java代碼中的servlet 「indexServlet」:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     DataGathering dBConnector = new DataGathering(); 
     List<Long> lstDetailVewOID; 
     lstDetailVewOID = dBConnector.getDetailVewOID(); 
     request.setAttribute("detailVewLst", lstDetailVewOID); 
     // pass the list to jsp page. 
     request.getRequestDispatcher("/index.jsp").forward(request, response); 
    } 

自此CSS代碼停止工作,它給我這個錯誤:

資源解釋爲樣式,但MIME類型 轉移text/html:「http:// localhost:8080/firstApplication/Style-Sheet/Template-Style.css」。

在跟蹤代碼,我發現,通過運行servlet類中的doGet()方法,它調用的頁面,並運行它,然後回到這個servlet再次關閉方法,我猜是因爲的錯誤這個程序,但不知道,我無法解決它。

當通過互聯網搜索時,我認爲該類型應該是文本/ css,但我已經做到了,並且相同的CSS文件在更改代碼之前找到了。

調用JSP中的CSS文件:

<link href="Style-Sheet/Template-Style.css" rel="stylesheet" type="text/css"> 

編輯: web.xml中映射:

<servlet> 
     <servlet-name>Index</servlet-name> 
     <servlet-class>com.Teklabz.Servlets.IndexServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Index</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
+0

你能包括定義servlet的web.xml中的相關部分?我對servlet的URL模式感興趣。在我看來,CSS請求正在調用servlet(它不應該),但需要看到web.xml確定 – NickJ

+0

@NickJ我剛剛添加了web.xml代碼 – IBRA

回答

2

我想你通過你的servlet返回如CSS和圖像靜態資源。這本身就不好,但如果你這樣做,你需要在響應頭文件中設置正確的MIME類型。其實我認爲你應該從/ *改變servlet到url的映射,就像/*.jsp一樣,所有其他的靜態資源都會被你的tomcat/jetty處理,它們是正確的。

<web-app> 
    <servlet> 
     <servlet-name>Servlet1</servlet-name> 
     <servlet-path>foo.Servlet</servlet-path> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Servlet1</servlet-name> 
     <url-pattern>/*.jsp</url-pattern> <!-- right here! --> 
    </servlet-mapping> 
</web-app> 
+0

我曾經在c#上工作過,是我第一個使用java的項目。我不知道你說的「通過你的servlet返回靜態資源」是什麼意思。你也說過這是不好的做法,那麼做什麼是正確的。抱歉給你帶來不便。 – IBRA

+1

@IbrahimSwaiss沒關係,這是非常平常的新手錯誤。當你將所有的瀏覽器請求映射到你的servlet時,你必須處理它們,甚至簡單地輸出請求的文件,如css,js或圖像文件。通常情況下,這不是你真正想要的(除非你真的想要讀出靜態內容,即從數據庫)。因此,您可以僅根據要處理的請求(即* .jsp)映射瀏覽器請求,並將靜態內容的傳遞請求傳遞給默認的tomcat servlet。這個servlet可以排除簡單的靜態資源(具有適當的mime類型)。 –

+0

感謝,它現在正在工作,但我有一個問題,如果你不介意,我設置應用程序從一個特定的servlet開始。正如你在問題中看到的那樣,web.xml中的url是空的(即使它並不重要),當我啓動應用程序時,url包含servlet「.java」的名稱,但如果我去代碼中的servlet直接輸入,或者直接在瀏覽器中輸入,url將顯示爲它在web.xml中寫入的內容。它給出了相同的結果,但具有正確的網址。如何使它從一開始就以正確的URL開始。謝謝 – IBRA