【问题标题】:how to configure servlet mapping如何配置 servlet 映射
【发布时间】:2013-10-29 14:54:59
【问题描述】:

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

【问题讨论】:

  • 请发布您的控制器代码
  • 请求映射基于控制器
  • 不要将你的上下文路径放在url-pattern中。
  • 能帮忙改写吗?

标签: java spring servlets spring-mvc configuration


【解决方案1】:

如果你删除:

@RequestMapping("/controllerPath")

@RequestMapping("/")

新的 servlet 映射将起作用。

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

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

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

【讨论】:

  • 我希望调度器 servlet 只处理来自这个控制器的请求
  • 我不明白。你能在web.xml中写下我需要写的东西吗?我不想更改 java 代码
  • 如果您不想更改java代码,则将url-pattern保留为/
  • 你能写出整个 servlet 映射吗?我听不懂
  • 映射为根并剥离 url 模式是如此不寻常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2015-02-14
  • 1970-01-01
  • 2015-03-01
  • 2011-11-01
  • 2012-11-11
  • 2016-03-12
相关资源
最近更新 更多