SpringMVC常用註解及參數綁定(02)

一、SpringMVC常用註解:

(1)、@Controller:如果不加該註解說明只是一個普通的bean,作用在類上面才聲明該類是一個控制器。

(2)、@RequestMapping

        如果作用在類上面:可以起到窄化請求映射的作用;

        如果作用在方法上面:指定url到請求方法的映射。常用value和method屬性,其中method常用get和post兩種請求方式。

        如果沒有指明請求方式,則默認可以使用任何的http請求方式。

(3)、@RequestParam:將請求中的參數綁定到方法中的形參。

(4)、@PathVariable:用於restful風格的url,將url中{userId}的userId綁定到方法中的形參。@PathVariable中的變量名稱             要和RequestMapping中的變量名稱相同。

(5)、@RequestBody:將json轉換爲object對象pojo。

(6)、@ResponseBody:將object對象pojo轉換爲json。

(7)、@Autowired:按照類型注入。例如:把service注入到Controller中去。

(8)、@Resource:按照名稱注入。把service注入到Controller中去。如果一個接口有多個實現類的話要用該註解。

(9)、@ModelAttribute:將請求參數綁定到model對象中.(開發中一般不用,麻煩)

(10)、@SessionAttribute:只能作用在類上面,允許我們有選擇的將Model中的哪些屬性轉存到HttpSession對象中。

(11)、@CookieValue:將請求的cookie綁定到方法中的形參。例如:JSESSIONID。

(12)、@RequestHeader:將請求頭綁定到方法中的形參。

二、SpringMVC參數綁定

    (1)、默認的參數綁定:HttpServletRequest、HttpServletResponse、HttpSession、Model。意思是說在Controller方法參數中可以加入這些,也可以不加,加不加看自己需求而定。

    (2)、基本數據類型:包括String類型。SpringMVC可以直接接收基本數據類型,可以幫你自動進行類型轉換。但形參名稱要和頁面的input框中的name屬性值相同。

    (3)、Pojo類型:SpringMVC可以直接接受pojo類型,但要求頁面上input框的屬性值要和pojo屬性值相同。

    (4)、Pojo的包裝類VO類型:SpringMVC可以直接接收VO類型:但要求input輸入框的屬性值要等於vo的屬性.屬性.屬性...

     (5)、自定義參數綁定:

/**
 * S - source:源
 * T - target:目標
 * @author zj
 *
 */
public class CustomGlobalStrToDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String source) {
        try {
            Date date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(source);
            return date;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

}

在springmvc的核心配置文件中配置:

<!-- @Controller註解掃描 -->
    <context:component-scan base-package="cn.itheima.controller"></context:component-scan>
    
    <!-- 註解驅動:
            替我們顯示的配置了最新版的註解的處理器映射器和處理器適配器 -->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    
    <!-- 配置視圖解析器
    作用:在controller中指定頁面路徑的時候就不用寫頁面的完整路徑名稱了,可以直接寫頁面去掉擴展名的名稱
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 真正的頁面路徑 =  前綴 + 去掉後綴名的頁面名稱 + 後綴 -->
        <!-- 前綴 -->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!-- 後綴 -->
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    <!-- 配置自定義轉換器
    注意: 一定要將自定義的轉換器配置到註解驅動上
    -->
    <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <!-- 指定自定義轉換器的全路徑名稱 -->
                <bean class="cn.itheima.controller.converter.CustomGlobalStrToDateConverter"/>
            </set>
        </property>

    </bean>

    (6)、數組:在VO中定義Integer[] ids。例如:批量刪除。

    (7)、List集合:在VO中定義private List<Items> itemsList;例如:批量修改使用。

三、SpringMVC中Controller方法返回值。

    (1)、ModelAndView指定了模型和視圖。

    (2)、void:形參可以使用request和response指定響應結果。      

                《1》、request.getRequestDispatcher("頁面路徑").forward(request, response);         

                《2》、response.sendRedirect("url");

                《3》、response.setCharacterEncoding("utf-8");

                response.setContentType("application/json;charset=utf-8");

                response.getWriter().write("json串");

    (3)、String:邏輯視圖名。

                《1》、邏輯視圖名。

                《2》、重定向:return "redirect:queryItem.action";

                             redirect方式相當於“response.sendRedirect()”,轉發後瀏覽器的地址欄變爲轉發後的地址。

         因爲轉發即執行了一個新的requestresponse

         由於新發起一個request原來的參數在轉發時就不能傳遞到下一個url

                《3》、請求轉發:return "forward:editItem.action";                  

forward方式相當於“request.getRequestDispatcher().forward(request,response)”,轉發後瀏覽器地址  欄還是原來的地址。轉發並沒有執行新的requestresponse,而是和轉發前的請求共用一個requestresponse。所以轉發前請求的參數在轉發後仍然可以讀取到。

相對路徑和絕對路徑:

//後面forward:itemEdit.action表示相對路徑,相對路徑就是相對於當前目錄,當前爲類上面指定的items目錄.在當前目錄下可以使用相對路徑隨意跳轉到某個方法中
//後面forward:/itemEdit.action路徑中以斜槓開頭的爲絕對路徑,絕對路徑從項目名後面開始算。

























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章