遇到過的問題
- mysql無法修改密碼
- sql文件執(zhí)行里面的`被我寫成了'(??)
- 啟動(dòng)tomcat500
- 其他照著教程做卻無法運(yùn)行起來的問題(試過了2次)
總結(jié)知識(shí)點(diǎn)
我個(gè)人了解一樣?xùn)|西習(xí)慣先從大概上搞清楚它是怎么回事,它的體系結(jié)構(gòu)是怎樣的,它的運(yùn)作流程是怎樣的入手。不弄清楚這些總感覺前后左右無法產(chǎn)生聯(lián)系,知識(shí)點(diǎn)總是孤立的,總有一種此路不通的感覺,強(qiáng)迫癥了。Orz...
因此先將Spring MVC的工作流程梳理了一下,以下僅是一個(gè)剛學(xué)習(xí)者的的個(gè)人的初步理解,部分內(nèi)容可能存在出于理清、歸類的需要而產(chǎn)生的個(gè)人猜測(cè),待我理解更深入了再來更新此文章,希望在此之前沒人看到,沒人看到,哈哈。。
如有錯(cuò)誤歡迎指出,非常感謝。
Spring MVC概貌:

其中1 、2、3、4按照次序執(zhí)行。下面將依據(jù)這張圖,舉例梳理一次最簡單的請(qǐng)求的大概流程
HTTP Request
- 瀏覽器發(fā)起請(qǐng)求:http://localhost:8080/HelloWeb/hello.jsp
- 根據(jù)
web.xml配置,通過*.jsp找到HelloWeb這個(gè)servlet-mapping
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
- 然后請(qǐng)求被轉(zhuǎn)發(fā)到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
下面的四個(gè)工作流程都?xì)wDispatcherServlet來調(diào)度
1、HandlerMapping
HandlerMapping開始工作:根據(jù)映射配置找到dispatcher
- 由
servlet-mapping映射到的HelloWeb確定,下一步將要去同級(jí)目錄下的HelloWeb-servlet.xml文件中去找更多的配置 - DispatcherServlet查找到
HelloWeb-servlet.xml中的<context:component-scan base-package="com.tutorialspoint">,將開始從這個(gè)包下面去尋找加了Spring注解@Controller的類來處理這個(gè)請(qǐng)求 - 找到了一個(gè)這樣的類:
@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注解,以及一個(gè)@RequestMapping注解,這個(gè)注解表明,所有的/hello請(qǐng)求都在這里處理
- 其中方法
printHello()返回了字符串"hello",參數(shù)中的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中的處理結(jié)果中,方法返回了一個(gè)字符串"hello",根據(jù)規(guī)則,在"hello"上加前綴(prefix)"/WEB-INF/jsp/"和后綴(suffix)".jsp",拼成"/WEB-INF/jsp/hello.jsp" - 根據(jù)此路徑,找到對(duì)應(yīng)的jsp文件:
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
4、View
View開始工作了:創(chuàng)建JSP頁面,并將之前Spring在Controller中傳遞給hello()方法的參數(shù)message取出來,傳遞到頁面的${message}中。
HTTP Response
DispatcherServlet將渲染好的View返回給瀏覽器
至此,一次請(qǐng)求-響應(yīng)完成。
Reference:
Spring - MVC Framework Overview