我回到斯普林斯工作。我以前在斯普林斯工作但是盲目地,不太了解。我曾经遇到很多错误,非常基本的错误,而且我又得到了它们。
我的问题是,我不知道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概念的答案。从运行应用程序到显示主页。在这个过程中发生了什么?服务器从哪里开始?怎么样?
答案 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;
}