首先, 我總結復習之前的內容, 詳細地介紹一下SpringMVC各組件的作用和用法.
1.配置前端控制器
2.配置映射器
3.配置適配器
4.配置視圖解析器
5.配置Handler
DispatcherServlet.properties
springmvc中:當我們沒有手動去配置,映射器,適配器,視圖解析器這么幾個組件的時候,那么會自動去加載DispatcherServlet.properties配置文件的默認配置

另外一個映射器和適配器(非注解), 這兩種不常用!
適配器: HttpRequestHandlerAdapter
該適配器要求Handler實現HttpRequestHandler接口
映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
在視圖解析器中配置jsp路徑的前綴和后綴,那么在返會ModelAndView的時候,JSP路徑會默認加上下面配置的前綴和后綴
Springmvc的注解形式的適配器和映射器
AnnotationMethodHandlerAdapter
DefaultAnnotationHandlerMapping
上面的映射器和適配器從3.2版本開始就已經過時了
3.2版本以后采用的注解映射器和注解適配器
映射器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
適配器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
Springmvc.xml文件中的配置


相關注解:
@Controller:申明下面的類是一個Handler, 并且會由springIOC容器來創(chuàng)建實例
@RequestMapping: 指定Handler中某個方法的訪問路徑
那么采用注解形式開發(fā),可以在一個Handler中編寫多個業(yè)務方法
參數的綁定
在springmvc中有幾個參數是默認已經綁定好了的
HttpServletReuqest
HttpServletResponse
Model
HttpSession
如果要是用上面幾個參數,只需要在形式參數中綁定即可
1.簡單類型的綁定
默認情況下,請求中的參數名必須要和Controller方法中的形參的參數名一致才能綁定成功


上面的注解表示請求中的參數名要和value的值保持一樣 才能綁定成功
required: 表示該參數是否是必須的。
defaultValue: 給這個參數一個默認值。
2.pojo類型的綁定
a) 簡單類型pojo
要求請求中的參數名和pojo中的屬性名保持一致才能綁定
b) 包裝類型的pojo
如果綁定的類型是包裝的pojo類型, 那么請求參數名必須是包裝的pojo中的屬性名.屬性名
直到最后的類型是簡單類型即可,如下圖,綁定的參數是
包裝類型QueryVo
queryVo中的屬性items,而items中的屬性是name,price ... 所以請求參數名為items.name
實體類:
public class QueryVo {
private Items items;
// 封裝List集合, 集合中元素為Items
List<Items> itemsList;
// ...
}
public class Items {
private Integer id;
private String name;
private Double price;
private String detail;
private String pic;
private Date createtime;
// ...
}


解決中文亂碼的過濾器
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 自定義參數綁定
需要我們自定義一個參數類型轉換器 ,去實現springmvc提供的一個接口Converter<String, Date>。
/**
* 將字符串轉換成Date類型
* Author menglanyingfei
* Created on 2018.01.24 14:44
*/
public class StringToDate implements Converter<String, Date> {
@Override
public Date convert(String s) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return format.parse(s);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
然后還需要在處理器適配器中配置一個自定義參數綁定器:
在springMVC.xml中配置:
<!-- 配置注解形式的適配器和映射器
conversion-service: 配置自定義參數綁定器
validator: 引入一個校驗器
-->
<mvc:annotation-driven conversion-service="conversionService"
/>
<!-- 注冊一個參數綁定器 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 轉換器 -->
<property name="converters">
<list>
<bean class="com.wtu.ssm.utils.StringToDate"/>
</list>
</property>
</bean>
Jsp頁面:

4. 數組類型的參數綁定
批量刪除商品: 根據商品的id刪除,多個商品的id,將多個id綁定到一個數組中:
只需要請求參數名和controller方法中的形參的數組名一致即可。


5. 集合類型的參數綁定
批量修改商品信息:
- 批量查詢商品, 然后將所有的商品顯示在一個批量修改的頁面。批量修改商品的頁面可以直接采用ItemsList.jsp
-
提交批量修改商品
image.png
頁面上的參數名該怎么定義?

此時在QueryVo中封裝了itemsList集合:

完整代碼地址
https://github.com/menglanyingfei/SSMLearning/tree/master/SSM
