SpringMVC入門系列(2)-SpringMVC處理請求流程
阿新 • • 發佈:2021-07-01
SpringMVC處理請求流程
SpringMVC處理請求的流程
- 發起some.do請求
- tomcat (web.xml--url-pattern知道。*.do的請求給DispatcherServlet)
- DispatcherServlet. (根據springmvc.xml配置知道some.do---doSone() )
- DispatcherServlet把some.do轉發給MyController中的doSome()方法
- 框架執行dosome()把得到ModelAndView進行處理,轉發到show.jsp
SpringMVC執行過程
- tomcat啟動,建立容器的過程通過load-on-start標籤指定的1,建立Disaptcherservlet物件,DisaptcherServlet它的父類是繼承HttpServlet的,它是一個serlvet,在被建立時,會執行init ()方法在init ()方法中
//建立容器,讀取配置檔案
WebApplicationContext ctx=new ClassPathxmlApplicationContext (" springmvc.xml");
//把容器物件放入到ServletContext中
getServletContext().setAttribute (key, ctx) :
上面建立容器作用:建立@Controller
註解所在的類的物件,建立MyController物件,這個物件放入到springmvc的容 器中,容 器是hap,類似map.put ("myController ,MyController物件)
- 請求的處理過程
1)執行servlet的service()
proteoted void service (HttpServletRequest request, HttpServletRe sponse response)
proteoted vold doservice (HttpservletRequst request, HttpservletResponse re sponse)
Dispatcherservlet. doDispatch(request,response) {
呼叫MyController的.doSome()方法;
}
配置檢視解析器
- 當我們訪問
http://localhost:8080/ch0_hello_springmvc_war/
- show.jsp放在webapp下,該目錄下使用者都可以訪問該頁面
- 將show.jsp移動到
WEB-INF\view
下,因為在WEB-INF
下的jsp頁面使用者都沒有許可權進行訪問
- 按照路徑訪問該地址
http://localhost:8080/ch0_hello_springmvc_war/WEB-INF/view/show.jsp
發現是404
頁面
- 在
MyController
中修改檢視的位置
@RequestMapping(value = "/some.do")
public ModelAndView doSome(){
//處理some.do請求了。相 當於service呼叫處理完成
ModelAndView mv=new ModelAndView();
//新增資料,框架在請求的最後把資料放入到request作用域。
//request . setAttribute("msg" , "歡迎使用springmvc做web開發");
mv.addObject("msg","歡迎使用springmvc做web開發!");
mv.addObject("fun","指定的是doSome方法");
//指定檢視,指定檢視的完整路徑
//框架對檢視執行的forward操作,request. getRequestDi spather("/show . jsp). forward(...)
mv.setViewName("WEB-INF/view/show.jsp");
return mv;
}
- 測試正常情況下可以訪問的到
- 我們發現檢視的路徑比較長,而且比較冗餘,我們可以在
springmvc.xml
配置相應的檢視解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--字首:檢視檔案的路徑-->
<property name="prefix" value="WEB-INF/view/"></property>
<!--字尾:檢視檔案的副檔名-->
<property name="suffix" value=".jsp"></property>
</bean>
- 修改
MyController
中繫結的檢視
@RequestMapping(value = "/some.do")
public ModelAndView doSome(){
//處理some.do請求了。相 當於service呼叫處理完成
ModelAndView mv=new ModelAndView();
//新增資料,框架在請求的最後把資料放入到request作用域。
//request . setAttribute("msg" , "歡迎使用springmvc做web開發");
mv.addObject("msg","歡迎使用springmvc做web開發!");
mv.addObject("fun","指定的是doSome方法");
//指定檢視,指定檢視的完整路徑
//框架對檢視執行的forward操作,request. getRequestDi spather("/show . jsp). forward(...)
mv.setViewName("show");
return mv;
}
- 實際的效果
- 一個controller中可以有多個方法處理不同的請求,其中一個方法也可以處理多種請求