我有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

最佳答案

如果删除:

@RequestMapping("/controllerPath")




@RequestMapping("/")


新的servlet映射将起作用。

原因是在spring尝试将其与控制器匹配之前,将删除servlet映射URL中的所有内容。

例如,在仅使用/的第一个url映射中(并假设您的Web应用已部署到/mvc),您的/mvc/controllerPath/sayHello路径spring会将url映射从url剥离下来,并期望找到一个可以映射的控制器到/controllerPath/sayHello

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

09-26 16:55