SpringMVC學習(一)引數繫結,自定義轉換器,處理請求亂碼
阿新 • • 發佈:2019-02-13
一、註解對映器和介面卡
1,元件掃描器
使用元件掃描器省去在spring容器配置每個controller類的繁瑣。
<!--開啟註解掃描 -->
<context:component-scan base-package="com.itcast.*"/>
2,RequestMappingHandlerMapping
註解處理器對映器,對勒種標記@RequestMapping的方法進行對映。
<!--
作用:替我們自動配置最新的註解器對映器、註解器介面卡
-->
<mvc:annotation-driven />
3,檢視解析器
在spring.mvc.xml檔案配置如下:
<!--
配置檢視解析器
作用:在controller中指定頁面路徑的時候不用寫完整路徑,
可以直接寫頁面,去掉拓展的名稱。
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--字首 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--字尾-->
<property name="suffix" value=".jsp"/>
</bean>
4,@RequestMapping 對映的方法預設支援的方法引數型別
- HttpServletRequest:通過request物件獲取請求資訊
- HttpServletResponse:通過response處理響應資訊
- HttpSession:通過session物件得到session中存放的物件
- Model/ModelMap
ModleMap是Model介面的實現類,通過Modle或ModelMap向頁面傳遞資料。
model.addAttribute("item", item);
頁面通過${item .XXXX}獲取item物件的屬性值。
注意:如果使用Model就不能使用ModelAndView物件,Model物件
可以向頁面傳遞資料,View物件可以使用String返回值代替。
本質都是使用request請求向jsp傳遞資料。
二、方法引數的繫結
1,@RequestParam 常用於處理簡單型別的繫結
@RequestMapping("/itemEdit/{id}")
public String itemEdit(@PathVariable("id")
這裡id代表接收的引數名,必須與請求的引數名一致,否則獲取不到值。
2,繫結pojo型別
假如表單提交資料
<input type="text" name="name"/>
<input type="text" name="price"/>
pojo定義
public class Items{
private String name;
private String price;
}
請求的引數名和pojo的屬性名稱一致,會自動將請求引數賦值給pojo屬性
@RequestMapping("/updateitem")
public String updateItem(Items items) {
itemService.updateItem(items);
return"success";
}
注意:如果提交日期型別的資料需要用自定義引數繫結
3,自定義引數繫結
由於日期資料有很多種格式,springMvc沒有辦法把字串轉化成日期
型別,所以需要自定義引數繫結。
(1)自定義Convert
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
returnsimpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
returnnull;
}
}
(2)配置Convert
<!--註解驅動-->
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 配置自定義轉換器 注意: 一定要將自定義的轉換器配置到註解驅動上 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<!-- 指定自定義轉換器的全路徑名稱 -->
<bean class="cn.contorller.converter.DateConverter" />
</set>
</property>
</bean>
三、處理請求亂碼問題。
1,post請求亂碼
web.xml中加入
<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>
2,get請求亂碼
String uName = request.getParamter("userName");
userName = new String(uName.getBytes("ISO8859-1"),"utf-8")