D44-SpringMVC(01)
阿新 • • 發佈:2019-01-05
一、SpringMvc的概述
- Web層
a. 接受瀏覽器的請求引數servelet
b. 封裝引數到物件JavaBean
c. 響應資料到頁面jsp
d. 涉及mvc思想(將控制,邏輯,展示相分離的思想)
e. web層框架又稱為mvc框架 - Service:各種業務需求,事務
-
- spring(類,開啟事務,提交事務,釋放資源)
- Dao層:
-
- JdbcTemplate
-
- Mybatis
-
- JPA:
-
-
- 規範(一套介面)
-
-
-
- 所有的orm框架都實現了這個介面
-
- MVC
a. MVC是一種設計思想
b. 作用: 將邏輯,業務,檢視相分離的一種思想,各自專注於做自己的事情。
c. M:model(模型) JavaBean
d. V(view):jsp
e. C(controller):控制器 servlet(SpringMvc) - spring提供一個子框架, 為web層提供一個框架
a. 前端控制器:
b. springmvc提供好了
c .webxml做配置
二、入門案例
- springmvc的訪問方式
-
- 匯入spring的座標
-
- 在web.xml中配置前端控制器,還得讓前端控制器載入- - spring配置檔案
-
- 編寫spring配置檔案,做瀏覽器的訪問路徑和類方法的對映
-
- 編寫類和方法
-
- 瀏覽器編寫路徑訪問
- 環境的依賴座標:
-
- ioc座標
-
- Mvc相關的座標(Spring-web,Spring-webmvc)
2.2 搭建環境
- 建立maven-web工程,引入座標
- 建立類和方法
- 配置前端控制器
- 配置springmvc的配置檔案
2.3 SpringMVC的執行過程
2.4 SpringMVC中涉及的元件
- DispatcherServlet :前端控制器
-
- 使用者請求到達前端控制器,它就相當於MVC模式中的C,dispatcherServlet是整個流程控制的中心,由它呼叫其他元件處理使用者的請求,dispatcherServlet 的存在降低了元件之間 的 耦合性 。
-
web.xml中
<!--配置dispatcherServlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化就載入spirng配置檔案-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--<load-on-startup>:將servlet由第一次訪問才建立變成伺服器啟動就建立-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--
/*: 攔截所有 包含html和jsp
/: 攔截所有 不包含html和jsp
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
- < mvc:annotation-driven> 介面卡
-
- 整合處理對映器,處理器介面卡。
spring-mvc中
<!--對映器和介面卡-->
<mvc:annotation-driven></mvc:annotation-driven>
- 檢視解析器
-
- 頁面地址的拼接
-
-
- prefix
-
-
-
- suffix
-
spring-mvc中
<!--檢視解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
- @RequestMapping註解
-
配置請求路徑
-
- 可以配置到類上(用於區分模組)也可以配置到方法上
-
- Value(path):配置請求路徑
-
-Method:接受請求方式(post,get)預設接受所有請求
-
- Params:請求的引數,要求頁面必須攜帶的引數。
-
@Controller:
-
UserController類中
@Controller
public class UserController {
@RequestMapping(value = "/params1")
// 頁面請求引數資料封裝:引數式封裝
// 頁面簡單資料的封裝: 引數名必須和頁面的name屬性名一致
public String params1(String username,Double age){
System.out.println(username);
System.out.println(age);
return "success"; //檢視解析器 字首+頁面名+字尾
}
}
三、引數封裝
引數封裝:將頁面請求的引數封裝到物件中。
3.1 簡單資料的封裝
請求的引數名 = 方法名
- 頁數請求引數資料封裝:引數式封裝
-
- 要求:引數名必須和頁面的name屬性名一致
-
UserController類
@RequestMapping(value = "/params1")
// 頁面請求引數資料封裝:引數式封裝
// 頁面簡單資料的封裝: 引數名必須和頁面的name屬性名一致
public String params1(String username,Double age,Date date){
System.out.println(username);
System.out.println(age);
System.out.println(date);
return "success"; //檢視解析器 字首+頁面名+字尾
}
3.2 頁面物件資料的封裝
-
**要求:**保證頁面的name屬性名和物件的屬性名一致即可。
-
- 頁面物件list
-
UserController類
@RequestMapping(value = "/params2")
public String params2(User user){
System.out.println(user);
return "success";
}
3.3 封裝複雜型別的資料(集合list和map)
- List和map是物件中的屬性
- 請求引數名 = 集合屬性名[索引 | key].屬性。
- list集合封裝:
- 保證頁面的name屬性名是物件的集合屬性名[角標].屬性名 例如:accounts[0].name
// 頁面物件list集合資料的封裝:
@RequestMapping(value = "/params3")
public String params3(User user){
System.out.println(user);
return "success";
}
- map集合封裝
- 保證頁面的name屬性名是物件的map集合屬性名[key].屬性名 例如:maps[aaa].name
// 頁面物件map集合資料的封裝:
@RequestMapping(value = "/params4")
public String params4(User user){
System.out.println(user);
return "success";
}
3.4 處理中文亂碼的過濾器
- 細節處理:提供中文亂碼的過濾器
<!--springmvc提供的中文亂碼的過濾器(CharaterEncodingFilter)-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--告訴filter要使用哪個編碼-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.5 自定義型別轉化器
- 註冊型別轉化器
<!--告訴springmvc使用自己的String=Date型別轉換器 不在用預設的String=Date型別轉換器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters"> <!--這個集合中需要裝型別轉換器物件-->
<array> <!--把自己的型別轉換器給放入資料 -->
<bean class="cn.utils.StringToDateConverter"></bean>
</array>
</property>
</bean>
- 配置使用型別轉化器
<!--配置使用型別轉化器-->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
四、註解
- @RequestHeader:獲取請求頭的資訊
- @CookieValue:獲取cookie的資訊
- 屬性:
-
- Value:根據請求資訊key獲取值
-
- Required:是否必須要傳遞該頭資訊
-
-
- false:不是必須的
-
-
-
- true:必須要傳遞的。
-
@RequestMapping(value = "/params6")
public String params6(@RequestHeader(value = "Host") String header1, @RequestHeader(value = "Connection")String header2,
@CookieValue(value = "JSESSIONID")String jsid){
System.out.println(header1);
System.out.println(header2);
System.out.println(jsid);
return "success";
五、總結
- springmvc的環境搭建
-----1 依靠前端控制器(web.xml)
----配置servlet(dispatcherServlet)
----伺服器啟動就載入(load-on-startup)
----已建立就載入配置檔案(init-param)
----設定路徑 / (除了jsp和html以外的所有資源) - 建立spirng-mvc.xml配置檔案
----- ioc掃描器
-----對映器和介面卡 (mvc:anntation-driver)
-----檢視解析器 (字首和字尾)
-----自定義的型別轉換器的配置 - 建立類和方法
-----封裝簡單資料
-----封裝物件資料
-----封裝物件的list/map資料
----獲取servlet的api(request response session)
- 封裝過程中產生的細節:
-
- 使用了springmvc提供的解決中文亂碼的filter(charaterEncodingFilter)
-
- 自定義了String轉日期型別的型別轉換器(配置)
-
- 使用了springmvc提供的2個註解
-
-
- @RequestHeader:獲取請求的頭資訊
-
-
-
- @cookieValue:獲取cookie的jsid
-