今天復制一個現有的sPRing-mvc的項目修改配置作為新的項目,結果悲劇了!遇到了一個小問題困擾了半天,找同事找總監都沒有搞定,糾結了半天終于發現了問題所在,隨筆記一下,所謂好記性不如爛博客嘛!
問題描述:
項目很簡單,只是簡單搭建一個spring-mvc框架,寫一個測試的NewsController,關于問題的配置如下:
web.xml
1 <servlet> 2 <servlet-name>spring-mvc</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>/WEB-INF/spring-mvc.xml</param-value> 7 </init-param> 8 </servlet> 9 <servlet-mapping>10 <servlet-name>spring-mvc</servlet-name>11 <url-pattern>/*</url-pattern>12 </servlet-mapping>
spring-mvc的視圖解析器如下:
<!-- 視圖解釋類 通過配置文件,把一個視圖名交給到一個View來處理 InternalResourceViewResolver加入了JSTL的支持 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean>
controller方法如下
//首頁 @RequestMapping("/index") public String getnewsList(ModelMap model) { return "ttt"; }
ttt.jsp是/WEB-INF/views/目錄下的一個新建的ttt.jsp,就這樣啟動項目后,訪問項目http://localhost:8080/news/index,結果返回404,Problem accessing /news/WEB-INF/views/ttt.jsp。
解決方案
開始一直以為jsp頁面沒有編譯,最后發現確實沒有編譯,tomcat的jsp是在第一次請求頁面的時候編譯的,但是為什么沒有編譯呢?說明沒有請求到頁面,查看控制臺打印的信息發現
日志打印沒有找到/WEB-INF/views/ttt.jsp對應的handler,說明/WEB-INF/views/ttt.jsp請求又被spring-mvc的selvet攔截了兩次,問題出現了,為什么會攔截兩次呢?原因就出在web.xml里配置的攔截形式/*上面,修改成/就沒問題了。
總結一下
/*是攔截所有請求,包括視圖解析后跳轉的.jsp頁面,/則不會攔截視圖解析后的.jsp頁面!
新聞熱點
疑難解答