SpringMVC執行流程
開局一張圖:
是不是很懵逼,我們來把他翻譯成中文的:
emmmm~~~這樣是不是容易多了
然後我們再把它變成代碼來實現
執行流程
- DispatcherServlet表示前端控制器,是整個SpringMVC的控制中心,用戶發出的請求,DispatcherServlet接收請求並攔截請求。
- 假設我們的請求爲:http://localhost:8080/SpringMVC/hello
- 他會將它拆分爲三部分
- http://localhost:8080 服務器域名
- SpringMVC部署在服務器上的站點
- hello表示控制器
- 這個url表示爲:請求爲於http://localhost:8080 上的SpringMVC站點的hello控制器
- HandlerMapping爲處理器映射。DispatcherServlet調用HandlerMapping,HandlerMapping根據請求url查找Handler
- HandlerExcution表示具體的Handler,其主要作用是根據url查找控制器,如上url被查找的控制器爲:hello
- HandlerExcution將解析後的信息傳遞給DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示處理器適配器,其按照特定的規則去執行Handler。
- Handler讓具體的Controller執行
- Controller將具體的執行信息返回給HandlerAdapter,如ModelAndView.
- HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet
- DispatcherServlet調用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名。
- 視圖解析器將解析的邏輯視圖名傳給DispatcherServlet。
- DispatcherServlet根據視圖解析器解析的視圖結果,調用具體的視圖。
- 最終將視圖呈現給用戶
這樣是不是明白,下面用對應的代碼來實現
實現代碼
- 第1、2、3步
<!--/ 匹配所有的請求;(不包括.jsp)-->
<!--/* 匹配所有的請求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--Handler-->
<bean id="/hello" class="cn.at99guoke.conn.HelloController"/>
- 第4、5、6、7、8
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
package cn.at99guoke.conn;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:這裏我們先導入Controller接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和視圖
ModelAndView mv = new ModelAndView();
//業務層
//封裝對象,放在ModelAndView中。Model
mv.addObject("msg","HelloSpringMVC!");
//封裝要跳轉的視圖,放在ModelAndView中
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
- 最後幾步
<!--視圖解析器:DispatcherServlet給他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前綴-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--後綴-->
<property name="suffix" value=".jsp"/>
</bean>