spring MVC的困惑--url-pattern的/和/*有區別
今天試了下spring mvc遇到個很奇怪的事情,按照書上配置訪問時總是出現如下警告:
問題補充
我 的意思就是為什麼/*無法匹配,而/卻可以匹配到
原文:http://www.javaeye.com/problems/36433
————————————————————————————————————————————
上述問題我也遇到,所以就記錄下來。
總是現象就是:
spring用到forward("/WEB-INF/jsp/*.jsp")
而forward當然是又要經過web.xml的對映的,
然後,在URL匹配時,
<url-pattern>/</url-pattern> 不會匹配到*.jsp,不會進入spring的DispatcherServlet類
<url-pattern>/*</url-pattern> 會匹配*.jsp,導致進入spring的DispatcherServlet類,然後去尋找controller,接著找不到對應的controller所以報錯。
試驗了一下,改為 <url-pattern>/</url-pattern> 果然就不會報錯了,唉,還以為不能解決,為此還換成了velocity作為檢視,算了,繼續用velocity吧,簡單點。
總之,關於web.xml的url對映的小知識:
<url-pattern>/</url-pattern> 會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的字尾型url
<url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和字尾型的url(包括/login,*.jsp,*.js和*.html等)
org.springframework.web.servlet.DispatcherServlet noHandlerFound
警告: No mapping found for HTTP request with URI [/myspring/WEB-INF/jsp/hello.jsp] in DispatcherServlet with name 'spring'
web.xml
Xml程式碼- <servlet>
- <servlet-name>spring</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/springContext.xml</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>spring</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
springContext.xml
Xml程式碼- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- <bean name="/hc" class="com.hj.controllers.HelloController"/>
HelloController.java
Java程式碼- @Override
- protected ModelAndView handleRequestInternal(HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- return new ModelAndView("hello");
- }
在專案/WEB-INF/jsp目錄下防止hello.jsp檔案。按照上述配置訪問http://localhost:8081/myspring /hc,應該是出現hello.jsp內容才對,但是卻出現了一開始提到的警告。我搜尋了許多地方,結果在一老外的提供中找到了同樣的問題(http: //forum.springsource.org/archive/index.php/t-71263.html),解決方法老外也說明了,只是不知 道為什麼。
就是將web.xml中
Xml程式碼- <servlet-mapping>
- <servlet-name>spring</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
改成
Java程式碼
- <servlet-mapping>
- <servlet-name>spring</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
然後按照上述地址就可以訪問,但是這是為什麼呢?有誰知道請留言,不勝感謝!
問題補充
我 的意思就是為什麼/*無法匹配,而/卻可以匹配到
原文:http://www.javaeye.com/problems/36433
————————————————————————————————————————————
上述問題我也遇到,所以就記錄下來。
總是現象就是:
spring用到forward("/WEB-INF/jsp/*.jsp")
而forward當然是又要經過web.xml的對映的,
然後,在URL匹配時,
<url-pattern>/</url-pattern> 不會匹配到*.jsp,不會進入spring的DispatcherServlet類
<url-pattern>/*</url-pattern> 會匹配*.jsp,導致進入spring的DispatcherServlet類,然後去尋找controller,接著找不到對應的controller所以報錯。
試驗了一下,改為 <url-pattern>/</url-pattern> 果然就不會報錯了,唉,還以為不能解決,為此還換成了velocity作為檢視,算了,繼續用velocity吧,簡單點。
總之,關於web.xml的url對映的小知識:
<url-pattern>/</url-pattern> 會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的字尾型url
<url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和字尾型的url(包括/login,*.jsp,*.js和*.html等)
相關文章
- <url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>區別
- Spring MVC和Spring Boot的區別 - hackernoonMVCSpring Boot
- Strust2和Spring MVC的區別RustSpringMVC
- WebApi和MVC的區別WebAPIMVC
- MTV和MVC的區別MVC
- MVC、MVP和MVVM的區別MVCMVPMVVM
- MVC模式和MVP模式的區別MVC模式MVP
- spring boot與spring mvc的區別是什麼?Spring BootMVC
- MVC,MVP和MVVM之間的區別MVCMVPMVVM
- Spring框架和Spring boot有啥區別?框架Spring Boot
- 對spring的困惑????Spring
- spring和springmvc的區別SpringMVC
- MVC2 ,MVC3 ,MVC4,MVC5的區別,EF的各個版本的區別;LocalDB是個啥MVC
- SpringBoot和Spring有什麼區別?Spring Boot
- Aliyun Java Initializr 和 Spring 官方的到底有什麼區別?JavaSpring
- Spring中Filter和Interceptor的區別SpringFilter
- htmlentities和htmlspecialchars 的區別有哪些HTML
- MVC下的DAO介面類和SERVICE介面類區別?MVC
- spring mvc攔截器,spring攔截器以及AOP切面的區別和原始碼SpringMVC原始碼
- Spring Cloud:Zookeeper和Eureka的區別在哪?SpringCloud
- spring配置中classpath和classpath*的區別Spring
- HTTP和HTTPS的區別有哪些?HTTP
- SQLSERVER 的 truncate 和 delete 有區別嗎?SQLServerdelete
- 對SPRING事務的困惑Spring
- ASP.Net MVC與WebForm的區別ASP.NETMVCWebORM
- Spring set注入和構造注入的區別Spring
- 【Java面試】Spring中 BeanFactory和FactoryBean的區別Java面試SpringBean
- MyBatis-06-Spring的SqlSession和原始區別MyBatisSpringSQLSession
- CEO 和 CTO 沒有本質的區別
- python堆和棧的區別有哪些Python
- window.eval()和eval()是有區別的
- 有狀態和無狀態的區別
- Spring - 配置檔案中的classpath: 和 classpath*: 的區別Spring
- (第二講)Spring&Spring MVC&Spring Boot三者之間的區別與聯絡MVCSpring Boot
- net三層架構與MVC的區別架構MVC
- ../和./和/的區別
- WPF中的StaticResource和DynamicResource有什麼區別
- python的模組和類有什麼區別Python