如何配置servlet映射

时间:2013-10-29 14:54:59

标签: java spring servlets spring-mvc configuration

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

1 个答案:

答案 0 :(得分:2)

如果删除:

@RequestMapping("/controllerPath")

@RequestMapping("/")

新的servlet映射将起作用。

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

例如,在仅使用/的第一个网址映射中(并假设您的网络应用已部署到/mvc),您的/mvc/controllerPath/sayHello路径会将网址映射远离url并期望找到映射到/controllerPath/sayHello

的控制器

当您将url-pattern更改为/ controllerPath时,因为它也将删除它并寻找仅响应/sayHello的控制器,而控制器将不会这样,因为它期望/controllerPath/sayHello < / p>