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()”,轉發後瀏覽器的位址列變為轉發後的地址。
因為轉發即執行了一個新的request和response。
由於新發起一個request原來的引數在轉發時就不能傳遞到下一個url,
《3》、請求轉發:return"forward:editItem.action";
forward方式相當於“request.getRequestDispatcher().forward(request,response)”,轉發後瀏覽器地址 欄還是原來的地址。轉發並沒有執行新的request和response,而是和轉發前的請求共用一個request和response。所以轉發前請求的引數在轉發後仍然可以讀取到。
相對路徑和絕對路徑:
//後面forward:itemEdit.action表示相對路徑,相對路徑就是相對於當前目錄,當前為類上面指定的items目錄.在當前目錄下可以使用相對路徑隨意跳轉到某個方法中
//後面forward:/itemEdit.action路徑中以斜槓開頭的為絕對路徑,絕對路徑從專案名後面開始算。