2

我回来在斯普林斯工作。我曾经在斯普林斯工作,但盲目地,不太了解。我曾经遇到很多错误,非常基本的错误,现在我又遇到了。

我的问题是,我不知道工作的配置如何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'

我完全受够了,心碎了。
刚下班休息两个月,我又回到了起跑线上。

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

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

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

4

3 回答 3

3

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

<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 。我们需要通过编写特定的url请求来提及到控制器的映射,例如

<bean name="/insert.htm" class="com.controller.MyController"></bean>

所以在bean中我们提到它的请求/insert.htm告诉servlet在提到的类中查找。您需要在ex方法上方使用@RequestMapping的Annotation

@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
    }

因此,当出现 Request url 时,/insert.htm它会执行上述方法,它只返回一个 ModelAndView 对象,只返回一个视图。它再次转到 dispatcher-servlet.xml 并查找视图解析器,要添加的正常代码是

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

因此,它从中获取逻辑视图名称并将前缀和后缀附加到它。最后它在视图中显示内容。因此它在视图解析器前缀和后缀中查找显示内容,最后返回 /WEB-INF/jsp/ display.jsp .显示jsp内容

于 2013-06-25T09:35:03.917 回答
2

您仅将 Spring servlet 映射为以.htm. 对应用程序根的请求并没有结束,.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属性的值。

于 2013-06-10T12:40:15.450 回答
0

根据您发布的每个内容,您没有 url 的请求映射/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;
}
于 2013-06-10T12:08:54.237 回答