遇到过的问题
- mysql无法修改密码
- sql文件执行里面的`被我写成了'(😳)
- 启动tomcat500
- 其他照着教程做却无法运行起来的问题(试过了2次)
总结知识点
我个人了解一样东西习惯先从大概上搞清楚它是怎么回事,它的体系结构是怎样的,它的运作流程是怎样的入手。不弄清楚这些总感觉前后左右无法产生联系,知识点总是孤立的,总有一种此路不通的感觉,强迫症了。Orz...
因此先将Spring MVC的工作流程梳理了一下,以下仅是一个刚学习者的的个人的初步理解,部分内容可能存在出于理清、归类的需要而产生的个人猜测,待我理解更深入了再来更新此文章,希望在此之前没人看到,没人看到,哈哈。。
如有错误欢迎指出,非常感谢。
Spring MVC概貌:
Sping MVC概览其中1 、2、3、4按照次序执行。下面将依据这张图,举例梳理一次最简单的请求的大概流程
HTTP Request
- 浏览器发起请求:http://localhost:8080/HelloWeb/hello.jsp
- 根据
web.xml
配置,通过*.jsp找到HelloWeb这个servlet-mapping
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
- 然后请求被转发到DispatcherServlet:
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
DispatcherServlet
下面的四个工作流程都归DispatcherServlet来调度
1、HandlerMapping
HandlerMapping
开始工作:根据映射配置找到dispatcher
- 由
servlet-mapping
映射到的HelloWeb确定,下一步将要去同级目录下的HelloWeb-servlet.xml
文件中去找更多的配置 - DispatcherServlet查找到
HelloWeb-servlet.xml
中的<context:component-scan base-package="com.tutorialspoint">
,将开始从这个包下面去寻找加了Spring注解@Controller
的类来处理这个请求 - 找到了一个这样的类:
@Controller
@RequestMapping("/hello")
public class HelloController{
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
2、Controller
到这一步,Controller
开始工作了,可以看到类名上加了 @Controller
注解,以及一个@RequestMapping
注解,这个注解表明,所有的/hello
请求都在这里处理
- 其中方法
printHello()
返回了字符串"hello"
,参数中的ModelMap
是Spring框架传递过来给你加处理,以后是要被传递到view中用来渲染的。 -
Spring框架
定位到HelloWeb-servlet.xml
中的<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
找到配置的ViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
3、ViewResolver
下面ViewResolver
开始工作
-
Controller
中的处理结果中,方法返回了一个字符串"hello"
,根据规则,在"hello"
上加前缀(prefix)"/WEB-INF/jsp/"
和后缀(suffix)".jsp"
,拼成"/WEB-INF/jsp/hello.jsp"
- 根据此路径,找到对应的jsp文件:
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
4、View
View
开始工作了:创建JSP页面,并将之前Spring在Controller
中传递给hello()
方法的参数message取出来,传递到页面的${message}中。
HTTP Response
DispatcherServlet将渲染好的View返回给浏览器
至此,一次请求-响应完成。
Reference:
Spring - MVC Framework Overview
网友评论