URL模式servlet映射

时间:2016-11-13 06:04:54

标签: spring-mvc servlets

我使用Spring MVC创建了hello world示例,但是在servlet URL映射中有一件我不理解的事情,我在web.xml中做了以下事情:

<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

但是当我将servlet url-pattern更改为“/ *”并尝试: http://localhost:8080/hello

它不起作用,它不应该与我的servlet匹配吗? as *匹配所有内容

2 个答案:

答案 0 :(得分:0)

它不适用于/*,因为您尚未为该模式注册/创建控制器。

适用于http://localhost:8080/hello,因为您拥有控制器@RequestMapping("/hello")

只需将RequestMapping更改为@RequestMapping("/")以获取网址格式/*

答案 1 :(得分:0)

使用&#34; / *&#34;注册servlet时然后它会覆盖所有servlet映射,如果有的话。因此应该避免。这会覆盖默认的servlet映射,因此所有默认的url处理也会被覆盖,因此任何特定的url匹配都会失败。在你的情况下它是/你好。

根据您的情况,您最初使用/ test / *注册了这个用/ test注册的所有网址,因此它们已被识别。