遇到過的問題
- mysql無法修改密碼
- sql文件執(zhí)行里面的`被我寫成了'(??)
- 啟動tomcat500
- 其他照著教程做卻無法運(yùn)行起來的問題(試過了2次)
總結(jié)知識點(diǎn)
我個人了解一樣?xùn)|西習(xí)慣先從大概上搞清楚它是怎么回事继谚,它的體系結(jié)構(gòu)是怎樣的茄菊,它的運(yùn)作流程是怎樣的入手吸耿。不弄清楚這些總感覺前后左右無法產(chǎn)生聯(lián)系,知識點(diǎn)總是孤立的,總有一種此路不通的感覺番舆,強(qiáng)迫癥了。Orz...
因此先將Spring MVC的工作流程梳理了一下矾踱,以下僅是一個剛學(xué)習(xí)者的的個人的初步理解恨狈,部分內(nèi)容可能存在出于理清、歸類的需要而產(chǎn)生的個人猜測呛讲,待我理解更深入了再來更新此文章禾怠,希望在此之前沒人看到,沒人看到贝搁,哈哈吗氏。。
如有錯誤歡迎指出雷逆,非常感謝弦讽。
Spring MVC概貌:
其中1 、2关面、3坦袍、4按照次序執(zhí)行。下面將依據(jù)這張圖等太,舉例梳理一次最簡單的請求的大概流程
HTTP Request
- 瀏覽器發(fā)起請求:http://localhost:8080/HelloWeb/hello.jsp
- 根據(jù)
web.xml
配置捂齐,通過*.jsp找到HelloWeb這個servlet-mapping
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
- 然后請求被轉(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
下面的四個工作流程都?xì)wDispatcherServlet來調(diào)度
1、HandlerMapping
HandlerMapping
開始工作:根據(jù)映射配置找到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"
岳悟,參數(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é)果中,方法返回了一個字符串"hello"
堆缘,根據(jù)規(guī)則滔灶,在"hello"
上加前綴(prefix)"/WEB-INF/jsp/"
和后綴(suffix)".jsp"
,拼成"/WEB-INF/jsp/hello.jsp"
- 根據(jù)此路徑吼肥,找到對應(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返回給瀏覽器
至此,一次請求-響應(yīng)完成唆鸡。
Reference:
Spring - MVC Framework Overview