1. 程式人生 > >SpringMVC學習(一)引數繫結,自定義轉換器,處理請求亂碼

SpringMVC學習(一)引數繫結,自定義轉換器,處理請求亂碼

一、註解對映器和介面卡

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 對映的方法預設支援的方法引數型別

  1. HttpServletRequest:通過request物件獲取請求資訊
  2. HttpServletResponse:通過response處理響應資訊
  3. HttpSession:通過session物件得到session中存放的物件
  4. 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")