找不到HTTP请求的映射

时间:2013-06-10 10:46:23

标签: spring spring-mvc

我回到斯普林斯工作。我以前在斯普林斯工作但是盲目地,不太了解。我曾经遇到很多错误,非常基本的错误,而且我又得到了它们。

我的问题是,我不知道Spring-MVC的配置如何工作 当我从STS运行项目时会发生什么?
我正在研究STS中的spring模板项目。

我在运行项目时得到这个 WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/common/] in DispatcherServlet with name 'appServlet'

我完全厌倦了 离工作仅2个月,我回到了起跑线。

我不想发布我的代码并使问题具体化。

我想要一个解释服务器执行spring项目的方式的答案。从运行应用程序(基本的hello world应用程序)到主页的显示 这对所有初学者都有帮助 我尝试在网上搜索这样的解释,但我没有得到任何正确的解释,但得到了很多基本样本。这些样本很容易理解,但没有解释服务器的运行方式。

注意:我正在寻找解释Springs概念的答案。从运行应用程序到显示主页。在这个过程中发生了什么?服务器从哪里开始?怎么样?

3 个答案:

答案 0 :(得分:3)

这是最初servlet容器加载web.xml文件的流程。在web.xml中,我们将指定所有请求都由Spring FrontController处理,即DispatcherServlet。 我们通过添加以下代码来包含它

<servlet>
        <servlet-name>dispatcher</servlet-name>
         <servletclass>org.springframework.web.servlet.DispatcherServlet</servletclass>
         <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

这里指示url请求是否为* .htm,它由dispatcherServlet处理,然后dispatcherServlet加载dispatcher-servlet.xml。我们需要通过编写特定网址请求(例如

)来提及到控制器的映射
<bean name="/insert.htm" class="com.controller.MyController"></bean>

所以在bean中我们提到,对于/insert.htm的请求,它告诉servlet查看上面提到的类。你需要在方法之上使用@RequestMapping的注释来提前

@RequestMapping("/insert.htm")
public ModelAndView insert(HttpServletRequest req,Student student)
{
   String name=req.getParameter("name");
    int id=Integer.parseInt(req.getParameter("id"));
    student.setId(id);

    return new ModelAndView("display","Student",student);//It returns a view named        display with modelclass name as `Student` and model object student
    }

因此,当/insert.htm的请求网址出现时,它会执行上述方法,它返回一个ModelAndView对象,只返回一个视图。它再次转到dispatcher-servlet.xml并查找视图Resolver正常的代码是

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/jsp/"
      p:suffix=".jsp" />

因此,它获取逻辑视图名称并为其添加前缀和后缀。最后它在视图中显示内容。因此它查找显示在视图解析器前缀和后缀中的东西,最后返回/ WEB-INF /jsp/display.jsp .Which显示jsp内容

答案 1 :(得分:1)

您仅针对以.htm结尾的请求映射Spring servlet。对应用程序根目录的请求不会以.htm结束,因此Spring不会对其进行检索。编辑您的web.xml,如下所示:为所有请求使用Spring:

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

然后,使用它作为控制器:

package com.mkyong.common;

@Controller
public class HomeController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView helloWorld() {

        ModelAndView model = new ModelAndView("index");
        model.addObject("msg", "hello world");

        return model;
    }
}

控制器拦截对应用程序上下文根的请求,将msg属性添加到模型并重定向到index视图。

因此,您需要在index.jsp目录中添加/WEB-INF/views/文件。在jsp中,您将能够使用msg属性的值。

答案 2 :(得分:0)

根据您发布的内容,您没有针对网址/common/的请求映射。

您必须在控制器类中创建另一个请求映射函数,如下所示,并创建一个视图文件。

@RequestMapping(value = "/common/", method = RequestMethod.GET)
public ModelAndView common(HttpServletRequest request,
        HttpServletResponse response) {

    ModelAndView model = new ModelAndView("common");
    model.addObject("msg", "hello world");

    return model;
}