SpringMVC架構模式
![SpringMVC](http://p2.ttnews.xyz/loading.gif)
SpringMVC請求處理流程
一個典型的SpringMVC請求流程如圖所示,詳細分為12個步驟:
- 用戶發起請求,由前端控制器DispatcherServlet處理
- 前端控制器通過處理器映射器查找hander,可以根據XML或者註解去找
- 處理器映射器返回執行鏈
- 前端控制器請求處理器適配器來執行hander
- 處理器適配器來執行handler
- 處理業務完成後,會給處理器適配器返回ModeAndView對象,其中有視圖名稱,模型數據
- 處理器適配器將視圖名稱和模型數據返回到前端控制器
- 前端控制器通過視圖解析器來對視圖進行解析
- 視圖解析器返回真正的視圖給前端控制器
- 前端控制器通過返回的視圖和數據進行渲染
- 返回渲染完成的視圖
- 將最終的視圖返回給用戶,產生響應
SpringMVC項目搭建
實驗環境如下:
- IntelliJ IDEA 2018.1 (Ultimate Edition)
- SpringMVC 4.3.9.RELEASE
- Maven 3.3.9
這裡我是用IDEA來搭建的基於Maven的SpringMVC項目,搭建過程不再贅述,各種點擊並且下一步,最終創建好的項目架構如下:
![SpringMVC](http://p2.ttnews.xyz/loading.gif)
基於Maven的SpringMVC項目
添加前端控制器配置
使用了SpringMVC,則所有的請求都應該交由SpingMVC來管理,即要將所有符合條件的請求攔截到SpringMVC的專有Servlet上。
為此我們需要在 web.xml 中添加SpringMVC的前端控制器DispatcherServlet:
mvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:mvc-dispatcher.xml
mvc-dispatcher
*.action
該配置說明所有符合.action的url,都交由mvc-dispatcher這個Servlet來進行處理
編寫SpringMVC核心XML配置文件
從上一步的配置可以看到,我們定義的mvc-dispatcher Servlet依賴於配置文件 mvc-dispatcher.xml,在本步驟中我們需要在其中添加三個方面的配置
- 0x01. 添加處理器映射器
SpringMVC的處理器映射器有多種,這裡的使用的BeanNameUrlHandlerMapping其映射規則是將bean的name作為url進行處理
- 0x02. 添加處理器適配器
SpringMVC的處理器適配器也有多種,這裡的使用的SimpleControllerHandlerAdapter是Controller實現類的適配器類,其本質是執行Controller中的handleRequest方法。
- 0x03. 添加試圖解析器
這裡配置了InternalResourceViewResolver視圖解析器後,其會根據controller方法執行之後返回的ModelAndView中的視圖的具體位置,來加載對應的界面並綁定數據
編寫控制器
這裡模擬的是一個打印學生名單的Service,我們編寫的控制器需要將查詢到的學生名單數據通過ModelAndView渲染到指定的JSP頁面中
public class TestController implements Controller {
private StudentService studentService = new StudentService();
@Override
public ModelAndView handleRequest( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ListstudentList = studentService.queryStudents();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("studentList",studentList);
modelAndView.setViewName("/WEB-INF/views/studentList.jsp");
return modelAndView;
}
}
class StudentService {
public ListqueryStudents() {
ListstudentList = new ArrayList ();
Student hansonwang = new Student();
hansonwang.setName("hansonwang99");
hansonwang.setID("123456");
Student codesheep = new Student();
codesheep.setName("codesheep");
codesheep.setID("654321");
studentList.add(hansonwang);
studentList.add(codesheep);
return studentList;
}
}
編寫視圖文件
這裡的視圖文件是一個jsp文件,路徑為:/WEB-INF/views/studentList.jsp
學生名單
學生列表
姓名 | 學號 |
${student.name} | ${student.ID} |
結合本步驟和上一步驟,視圖和控制器都已編寫完成,由於我們之前配置的處理器映射器為:BeanNameUrlHandlerMapping,因此接下來我們還需要在mvc-dispatcher.xml文件中配置一個可被url映射的controller的bean,供處理器映射器BeanNameUrlHandlerMapping查找:
實驗測試
啟動Tomcat服務器,然後瀏覽器輸入:
http://localhost:8080/test.action
實驗結果
數據渲染OK。
備註:當然本文所使用的全是非註解的配置方法,即需要在XML中進行配置並且需要遵循各種實現原則。而更加通用、主流的基於註解的配置方法將在後續文章中詳述。
閱讀更多 訊宜捷科技 的文章