springMVC是一種基於Java實現的、WEB的MVC設計模式的、請求驅動類型的、輕量級的WEB框架。
1、springMVC使用了MVC的設計模式思想。
2、基於驅動請求,就是指使用了請求-響應的模式。
3、將WEB層進行了解耦。
springMVC的工作流程
瀏覽器發送一個請求給WEB服務器,由服務器來控制發送給哪一個servlet來進行處理。
在流程中的作用
springMVC中的前端控制器DispatcherServlet:又被成爲中央處理器。負責接收請求進行響應。通過調用其他的組件控制整個流程的跳轉。
處理器映射器:根據前端控制器轉給的URL請求地址去查詢handler處理器。
處理器適配器:前端控制器將根據URL查詢到的結果發送給適配器去適配執行處理器。
處理器:(需要自己進行開發)controller。
視圖解析器:對view信息進行解析。
過程(個人理解)
- 瀏覽器發出一個請求到前端控制器
- 前端控制器把請求信息的URL轉給處理器映射器
- 處理器映射器根據接收的URL進行處理,將處理結果返回給前端控制器
- 前端控制器將查詢到的結果轉給處理器適配器。
- 適配器根據結果適配合適的時處理器
- 處理器將結果進行處理後返回ModelAndView數據給處理器適配器
- 處理器適配器再將處理器返回的數據返會給前端控制器
- 前端控制器再將ModelAndView數據轉給視圖解析器
- 視圖解析器對View信息進行解析後將解析結果返回給前端控制器
- 前端控制器將得到的視圖 信息進行數據渲染
- 最後前端控制器將渲染好的視圖信息響應給瀏覽器
程序的基礎配置文件
配置web.xml文件
前端控制器
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化信息 -->
<init-param>
<!-- springMVC的配置文件位置 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!-- 項目啓動就會加載,填寫加載順序 -->
<load-on-startup>1</load-on-startup>
</servlet>
處理的請求
*.do
:處理以.do結尾的請求。不會攔截靜態資源
/
:攔截所有請求。符合RESTFUL風格。會導致靜態資源也會被攔截,而無法加載。
/*
:錯誤寫法。
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
編碼過濾器的配置
<!-- 編碼過濾器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:前端控制器中的name要與處理請求中的name一致
springMVC配置文件
處理器映射器 HandlerMapping
功能:根據url查詢處理器或者攔截器
BeanNameUrlHandlerMapping:把bean名字作爲請求的url
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
處理器適配器 HandlerAdapter
功能:配置處理器,執行處理器
SimpleControllerHandlerAdapter:對所有實現了controller接口的處理器進行適配
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>
視圖解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
在編寫springMVC配置處理器映射器和處理器適配器時需要寫兩個<bean></bean>
來配置,這裏也可以使用註解驅動,它提供了支持註解開發的處理器映射器和處理器適配器,還提供了json之和和數據綁定支持。
註解開發的詳情
@RequestMapping 裏需要配置映射的路徑,‘first’前面的‘/’可加可不加,後邊的‘.do’可加可不加
@ RequestMapping 可以註解到方法上也可以註解到類上。當註解到類上時,表示該類的所有方法都將映射到配置屬性的路徑下
例:
註解的屬性:
value:指的是請求的地址。是缺省的默認值。string[]支持多路徑、傳值
method:指請求的method類型。get、post。不配置method,代表支持所有請求類型。 method=RequestMethod.GET只支持get請求
@RequestMapping(value="first",method=RequestMethod.GET)
public ModelAndView first() {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","註解開發的項目");
mv.setViewName("user");
return mv;
}
springMVC支持返回的類型
1、ModelAndView
2、返回類型爲void:可以重定向或者轉發。或者是設置響應類型。類似於原生的Servlet開發
3、返回字符串類型:返回字符串可作爲邏輯視圖的名,可實現重定向 redirect:
;可進行轉發forward:
例:
// 重定向
@RequestMapping("third")
public String third() {
return "redirect:/one/first.do";
}
-------------------------------
// 轉發
@RequestMapping("fourth")
public String fourth(HttpServletRequest request,HttpServletResponse response){
request.setAttribute("msg", "轉發數據");
return "forward:/two/second.do";
}
4、返回map:異步開發的時候,會被轉成json格式的
數據綁定
處理器適配器會在執行handle之前,把http請求的信息的數據綁定到handle方法的形參上。
默認支持的參數類型
HttpServletRequest:
HttpServletResponse:
HttpSession
Model:作用:將數據填充到request域中
簡單數據類型的綁定
當請求中的參數名和處理器方法的參數名字一致時,會將請求中的參數數據與形參進行綁定
支持java基本數據類型:int、String、double、boolean等。
同時支持多參數。
@RequestParam :
value:綁定的傳參的參數名
required:是否是必須傳遞的,默認值是true
defaultValue:設置默認值
@RequestMapping("third")
public String third(@RequestParam(value="ids",required=false,defaultValue="1")int id,String name){
System.out.println("id:"+id);
System.out.println("name:"+name);
return "user";
}
簡單的實體類對象類型的數據綁定(屬性都是基本數據類型)
包裝實體類對象類型
在jsp中的屬性是一個對象時:在實體類中對象屬性名.對象中的屬性
<input type="text" name="car.carName">```