今天復(fù)制一個(gè)現(xiàn)有的sPRing-mvc的項(xiàng)目修改配置作為新的項(xiàng)目,結(jié)果悲劇了!遇到了一個(gè)小問題困擾了半天,找同事找總監(jiān)都沒有搞定,糾結(jié)了半天終于發(fā)現(xiàn)了問題所在,隨筆記一下,所謂好記性不如爛博客嘛!
問題描述:
項(xiàng)目很簡(jiǎn)單,只是簡(jiǎn)單搭建一個(gè)spring-mvc框架,寫一個(gè)測(cè)試的NewsController,關(guān)于問題的配置如下:
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的視圖解析器如下:
<!-- 視圖解釋類 通過配置文件,把一個(gè)視圖名交給到一個(gè)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方法如下
//首頁(yè) @RequestMapping("/index") public String getnewsList(ModelMap model) { return "ttt"; }
ttt.jsp是/WEB-INF/views/目錄下的一個(gè)新建的ttt.jsp,就這樣啟動(dòng)項(xiàng)目后,訪問項(xiàng)目http://localhost:8080/news/index,結(jié)果返回404,Problem accessing /news/WEB-INF/views/ttt.jsp。
解決方案
開始一直以為jsp頁(yè)面沒有編譯,最后發(fā)現(xiàn)確實(shí)沒有編譯,tomcat的jsp是在第一次請(qǐng)求頁(yè)面的時(shí)候編譯的,但是為什么沒有編譯呢?說明沒有請(qǐng)求到頁(yè)面,查看控制臺(tái)打印的信息發(fā)現(xiàn)
日志打印沒有找到/WEB-INF/views/ttt.jsp對(duì)應(yīng)的handler,說明/WEB-INF/views/ttt.jsp請(qǐng)求又被spring-mvc的selvet攔截了兩次,問題出現(xiàn)了,為什么會(huì)攔截兩次呢?原因就出在web.xml里配置的攔截形式/*上面,修改成/就沒問題了。
總結(jié)一下
/*是攔截所有請(qǐng)求,包括視圖解析后跳轉(zhuǎn)的.jsp頁(yè)面,/則不會(huì)攔截視圖解析后的.jsp頁(yè)面!
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注