springMVC
概述
SpringMVC是一個WEB層、控制層架構,主要用來負責與用戶端互動,業務邏輯的調用。
SpringMVC是Spring家族的一大元件.Spring整合SpringMVC可以做到無縫內建.
特點 簡單易用性能佳。
為了麼有了Servlet還要學SpringMVC
1.Servlet的開發配置相對麻煩,servlet特别多的時候web.xml檔案将會非常臃腫
2.每個Servlet都隻能處理一個功能,如果需要多個功能就需要開發多個Servlet,項目中存在大量Servlet顯得臃腫。
3.擷取請求參數 進行類型轉換 封裝資料到bean的 過程比較繁瑣。
4.其他開發中不友善的地方,例如,亂碼問題…資料格式處理…表單校驗…
架構組成
流程組成
前端控制器:本質上是一個servlet,相當于一個中轉站,所有的servlet都會走到這個中轉站中,再根據配置進行中轉到相應的Handler中進行處理,擷取到資料和視圖後,在使用相應視圖做出響應。 Handler處理器
處理器映射器:本質上就是一段映射關系,将通路路徑和對應的Handler存儲為映射關系,在需要時供前端控制器查閱。
處理器擴充卡:本質上是一個擴充卡,可以根據要求找到對應的Handler來運作。前端控制器通過處理器映射器找到對應的Handler資訊之後,将請求響應和對應的Handler資訊交由處理器擴充卡處理,處理器擴充卡找到真正handler執行後,将結果即model和view傳回給前端控制器。
視圖解析器:本質上也是一種映射關系,可以将視圖名稱映射到真正的視圖位址。前端控制器調用處理器适配完成後得到model和view,将view資訊傳給視圖解析器得到真正的view。
視圖:本質上就是将handler處理器中傳回的model資料嵌入到視圖解析器解析後得到的jsp頁面中,向用戶端做出響應。
執行流程
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csMzZU50MNRkT5FleYhnRzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuMzM4ADOwIjM4AjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
實作過程
配置檔案方式實作過程
第一步:配置前端控制器
前端控制器,本質上是一個servlet,在目前web項目中配置servlet。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
第二步:生成SpringMVC的核心配置檔案
SpringMVC預設會自動在web應用的WEB-INF目錄下去尋找[前端控制器ServletName]-servlet.xml作為目前SpringMVC的核心配置檔案。
建立這個檔案,這個檔案本身其實就是Spring的配置檔案,是以導入Spring相關的限制資訊,包括 beans、context、mvc
注:若配置檔案中方法,則可調整核心配置檔案位置及名稱
第三步:建立處理器,編寫代碼
想要開發一個處理器,寫一個類實作Controller接口,在其中的handlerRequest中編寫代碼處理請求,并将處理好的資料和目标視圖封裝到ModelAndView中傳回。
public class springmvctest01 implements Controller {
public class springmvctest01 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception {
//1.創阿ModulAndView對象
ModelAndView mav1 = new ModelAndView();
//2.封裝資料
mav1.addObject("k1","v1");
mav1.addObject("k2","v2");
//3.封裝視圖
mav1.setViewName("first");
//4.傳回ModulAndView
return mav1;
}
}
第四步:配置處理器映射器中路徑和處理器的映射關系
<!--配置處理器映射器-->
<bean name="/first.action" class="cn.tedu.web.springmvctest01">
</bean>
第五步:配置視圖解析器
視圖解析器,能夠映射到真正要通路的網頁,prefix為字首、suffix為字尾,前字尾拼接到解析的路徑,既為最後要通路的路徑。
<!--配置視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
開發視圖頁面
釋出應用,通過浏覽器通路最後檢視結果
注解方式實作過程
第一步:配置前端控制器,與配置檔案方式相同
第二部:生成SpringMVC的核心配置檔案,與配置檔案方式相同
第三部:添加springMVC配置檔案 中添加mvc注解方式
<!--SpringMVC注解方式配置-->
<mvc:annotation-driven></mvc:annotation-driven>
第四步:配置視圖解析器,與配置檔案方式相同
第五步:使用@RequestMapping開發Handler
@Controller
public class MyController {
@RequestMapping("/test01.action")
public String test01(Model model){
System.out.println("test01..");
model.addAttribute("k1","v1");
model.addAttribute("k2","v2");
model.addAttribute("k3","v3");
return "test01";
}
}
SpringMVC注解方式工作原理
1.當伺服器啟動時,先會加載web.xml,之後通過引入核心配置檔案加載springmvc-servlet.xml.就會解析該xml配置檔案.
2.當解析到包掃描時,掃描指定的包并将含有@Controller注解的類解析為處理器
3.如果配置過mvc:annotation-driven/ 就會解析Spring-MVC注解
4.解析@RequestMapping(value="/hello.action"),将指定的位址和目前方法的映射關系進行儲存
當使用者送出請求通路一個位址時,SpringMVC尋找該位址映射關系,如果存在,則找到響應處理器相應方法執行,如果找不到,則報404。
相關英語單詞:
Handler處理器
servlet标簽
DispatcherServlet 前端控制器
Internal 内部的
Resource 資源
View 視圖
Resolver 分解器
prefix 字首
suffix 字尾
property 屬性