2016-11-13 136 views
0

我創建使用Spring MVC的Hello World示例,但有一件事我沒有在服務器URL映射明白,我沒有在web.xml中有以下:URL模式的servlet映射

<servlet> 
    <servlet-name>HelloWeb</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>HelloWeb</servlet-name> 
    <url-pattern>/test/*</url-pattern> 
</servlet-mapping> 
現在

如果我要撥打以下控制器:

@Controller 
@RequestMapping("/hello") 
public class HelloWorld { 
    @RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model){ 
     model.addAttribute("message","hello world"); 
     return "index"; 
    } 
} 

,將工作使用下面的鏈接: http://localhost:8080/test/hello

但是當我改變服務器URL模式爲「/ *」並嘗試: http://localhost:8080/hello

它不起作用,它不應該與我的servlet匹配嗎? as * matches everything

回答

0

當您註冊一個servlet 「/ *」,那麼它將覆蓋所有的servlet映射如果有的話。因此應該避免。這會覆蓋默認的servlet映射,因此所有默認的url處理也會被覆蓋,因此任何特定的url匹配都會失敗。你的情況是/你好。

就你的情況而言,最初你註冊了/ test/*,這個註冊了你所有的URL和/ test,因此他們被識別出來了。

0

它不適用於/*,因爲您尚未爲該模式註冊/創建控制器。

它工作了http://localhost:8080/hello因爲,你有控制器@RequestMapping("/hello")

就在RequestMapping改變@RequestMapping("/")的url-pattern的/*

+0

其實這個工作「http:// localhost:8080 /測試/你好」不是你提到的那個。 –