1. 程式人生 > >SpringMVC常用註解及引數繫結(02)

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路徑中以斜槓開頭的為絕對路徑,絕對路徑從專案名後面開始算。