一、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路徑中以斜槓開頭的爲絕對路徑,絕對路徑從項目名後面開始算。