最近在使用Eclipse開發Java Web項目時,遇到了一個讓人頭疼的問題,就是無法訪問jQuery。在網頁中引用的jQuery庫文件完全下載到本地,并且文件路徑都寫得正確,卻一直無法加載。
經過一番搜索和嘗試,我發現這個問題的原因是因為Eclipse默認的web.xml文件沒有配置正確。在web項目中,Tomcat服務器會默認加載WEB-INF/lib下的所有jar包,但是如果沒有在web.xml中配置,就無法被web應用程序訪問到。
<!-- 配置servlet --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- 配置servlet-mapping --> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置過濾器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 配置過濾器映射 --> <filter-mapping> <filter-name>encodingFilter</filter-name> <servlet-name>DispatcherServlet</servlet-name> </filter-mapping> <!-- 配置jQuery庫文件 --> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <context-param> <param-name>javascriptDirectory</param-name> <param-value>/resources/jquery/</param-value> </context-param> <servlet> <servlet-name>jquery</servlet-name> <servlet-class>org.springframework.web.servlet.resource.ResourceServlet</servlet-class> <init-param> <param-name>httpCacheSeconds</param-name> <param-value>31556926</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>jquery</servlet-name> <url-pattern>/resources/jquery/*</url-pattern> </servlet-mapping>
如上代碼,我們需要在web.xml中增加一段配置代碼,用于指明jQuery的位置,如下所示:
<context-param> <param-name>javascriptDirectory</param-name> <param-value>/resources/jquery/</param-value> </context-param> <servlet> <servlet-name>jquery</servlet-name> <servlet-class>org.springframework.web.servlet.resource.ResourceServlet</servlet-class> <init-param> <param-name>httpCacheSeconds</param-name> <param-value>31556926</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>jquery</servlet-name> <url-pattern>/resources/jquery/*</url-pattern> </servlet-mapping>
然后,我們需要在jsp中增加如下代碼來加載jQuery:
<script src="${pageContext.request.contextPath}/resources/jquery/jquery.js"></script>
其中,${pageContext.request.contextPath}是jsp的一個默認對象,獲取當前web應用程序的根路徑。
配置好上述代碼之后,再次運行web應用程序,問題就得到了完美的解決!