【问题标题】:Spring servlet mapping not workingSpring servlet映射不起作用
【发布时间】:2013-10-13 08:58:01
【问题描述】:

当我尝试加载 http://localhost:8080/people 时,我收到 404 page not found 错误。

这是我在 web.xml 中的 servlet 映射:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/people/*</url-pattern>
</servlet-mapping>

这是我理解它的工作原理:

http://localhost:8080/people 的url 请求将被servlet "spring" 拦截并调用类org.springframework.web.servlet.DispatcherServlet 这是正确的吗?

是否需要一些额外的配置才能正确加载此类?

更新:

这里是控制器:

@Controller
public class PersonController {

    @Autowired
    private PersonService personService;

    @RequestMapping("/")
    public String listPeople(Map<String, Object> map) {

        map.put("person", new Person());
        map.put("peopleList", personService.listPeople());

        return "people";
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addPerson(@ModelAttribute("person") Person person, BindingResult result) {

        personService.addPerson(person);

        return "redirect:/people/";
    }

    @RequestMapping("/delete/{personId}")
    public String deletePerson(@PathVariable("personId") Integer personId) {

        personService.removePerson(personId);

        return "redirect:/people/";
    }
}

【问题讨论】:

  • 什么是people?是 JSP 页面吗?如果没有,则没有可显示的内容,您将看到一个 _blank 页面。

标签: spring tomcat servlets spring-mvc


【解决方案1】:

您有controller 支持来支持您的GET 回复吗?

类似的东西

@Controller
@RequestMapping(value = "/people")
public class LoginController {

    @RequestMapping(value = "/i_am_here", method = RequestMethod.GET)
    public String firstForm() {
        return "SHOW_ME_THE_JSP_PAGE";
    }
}

基于上面的例子,这将使你的获取 URL 请求像 -> /people/i_am_here

方法将被调用,并且可以在JSP 中发回响应。

Checkout this example under Github

https://github.com/hth/StatusInvoke/blob/master/src/com/example/UserController.java

【讨论】:

  • 好的,那么代码中的people 字符串是什么?它是指某个网页吗?我添加了一个指向现有控制器的链接。请看这个例子。如果您有任何问题,请告诉我。
  • 我不知道,这是我正在尝试配置的 heroku 应用程序。添加代码时,我收到以下消息:“HTTP Status 404 - /spring-hibernate-template/WEB-INF/jsp/SHOW_ME_THE_JSP_PAGE.jsp”这对我来说很有意义,因为 .jsp 尚未配置。代码 @RequestMapping(method = RequestMethod.GET) 是否充当控制器的默认获取请求映射?
  • 是的,如果您不使用t specify anything then it act as a default. You could try adding mapping like @RequestMapping(value = "/i_am_here", method = RequestMethod.GET). This will respond to URL request /i_am_here` 并且响应将是/i_am_here/SHOW_ME_THE_JSP_PAGE.jsp/SHOW_ME_THE_JSP_PAGE.jsp (没有代码无法确认)。所以简而言之,如果您在方法中放置一个调试点,那么您可以看到 URL 映射如何生效。 HTH
  • 如果我按照您的描述添加一个新的“@RequestMapping”,我认为如果不添加与请求映射匹配的 servlet 映射,就不能直接从浏览器调用它?
  • 更新了我的例子。请检查一下
猜你喜欢
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2016-02-26
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多