2

我有spring mvc应用程序

如果在 web.xml 我这样写:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我去http://localhost:8080/Mvc/controllerPath/sayHello 我看到我的页面

如果我写

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/controllerPath/*</url-pattern>
</servlet-mapping>

我去http://localhost:8080/Mvc/controllerPath/sayHello - 我看到 404

我想你明白我想要什么。

你能帮帮我吗?

更新

控制器:

@Controller
@RequestMapping("/controllerPath")
public class MyController {

    @RequestMapping("/sayHello")
    public String sayHello(Model model){
        model.addAttribute("name", "Vasya");
        return "hello";
    }

}

如果我写

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/Mvc/controllerPath*</url-pattern>
  </servlet-mapping>

我看到了 404

4

1 回答 1

3

如果您删除:

@RequestMapping("/controllerPath")

@RequestMapping("/")

新的 servlet 映射将起作用。

这样做的原因是,在 spring 尝试将其与控制器匹配之前,servlet 映射 url 中的任何内容都会被剥离。

例如,在您的第一个 url 映射中/(并假设您的 web 应用程序部署到/mvc),您的 spring 路径/mvc/controllerPath/sayHello将 url 映射从 url 中剥离,并期望找到一个映射到的控制器/controllerPath/sayHello

当您将 url-pattern 更改为 /controllerPath 时,since 也会剥离它并寻找一个响应 just/sayHello的控制器,您的控制器不会因为它期望/controllerPath/sayHello

于 2013-10-29T15:04:37.323 回答