003_Controller和RequestMapping注解
1. 控制器默認支持的參數類型
1.1. 直接在控制器方法形參上定義HttpServletRequest、HttpServletResponse、HttpSession和Model/ModelMap類型的對象, 不用創建對象, 就可以直接使用。
1.2. HttpServletRequest: 獲取request對象請求信息。
1.3. HttpServletResponse: 通過response對象處理相應信息。
1.4. HttpSession: 獲得session對象中存放的信息。
1.5. Model/ModelMap: Model是一個接口, ModelMap是一個實現類, 使用Model對象或ModelMap對象都行, 一般使用Model對象。將模型數據填充到request域中。
2. @Controller標識一個類是一個控制器。
3. @RequestMapping注解
3.1. @RequestMapping的value值定義Controller的url映射。可以定義方法的映射, 一個方法對應一個url。
3.2. 也可以定義類的映射, 用來窄化請求映射(比如是某個模塊的根路徑)。
3.3. @RequestMapping的method值可以設置請求類型。
4. 處理器方法的返回值
4.1.返回ModelAndView
4.2. 返回String??
4.2.1. 如果返回String, 表示的是邏輯視圖名。真正視圖(Jsp路徑)=前綴+邏輯視圖名+后綴。
4.2.2. 轉發: "forward:/WEB-INF/jsp/itemList.jsp"
4.2.3. 重定向: "redirect:itemList.jsp"
4.3. 返回void
5. 例子
5.1. 新建一個名為ControllerRequestMapping的Web工程, 同時拷入相關jar包
5.2. 新建Item.java
package com.lywgames.domain;import java.io.Serializable; import java.util.Date;public class Item implements Serializable{private static final long serialVersionUID = 1L;// 商品idprivate Integer id;// 商品名稱private String name;// 商品價格private Double price;// 商品創建時間private Date createtime;// 商品描述private String detail;public Item() { }public Item(Integer id, String name, Double price, Date createtime, String detail) {this.id = id;this.name = name;this.price = price;this.createtime = createtime;this.detail = detail;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Date getCreatetime() {return createtime;}public void setCreatetime(Date createtime) {this.createtime = createtime;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail;} }5.3. 新建ItemAction.java
package com.lywgames.web.action;import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.lywgames.domain.Item;// @Controller標識一個類是一個控制器。 @Controller // @RequestMapping的value值定義Controller類url映射, 用來窄化請求映射(比如是某個模塊的根路徑)。 @RequestMapping("item") public class ItemAction {List<Item> itemList = new ArrayList<Item>();public ItemAction() {itemList.add(new Item(1, "冰箱", 1999.0, new Date(), "保鮮。"));itemList.add(new Item(2, "電腦", 8888.0, new Date(), "網上沖浪"));itemList.add(new Item(3, "洗衣機", 4000.0, new Date(), "從此不用手。"));itemList.add(new Item(4, "空調", 2600.0, new Date(), "冬天制熱, 夏天制冷。"));itemList.add(new Item(5, "液晶電視", 20000.0, new Date(), "曲面屏幕"));}// @RequestMapping的value值定義Controller方法的url映射, method值可以設置請求類型。@RequestMapping(value="productsCallbackModelAndView", method={RequestMethod.GET})// 處理器方法返回ModelAndViewpublic ModelAndView productsCallbackModelAndView() { ModelAndView mav = new ModelAndView();mav.addObject("itemList", itemList); // 設置商品數據mav.setViewName("itemList"); // 設置視圖名字return mav;}@RequestMapping(value="productsCallbackString")// 處理器方法返回Stringpublic String productsCallbackString(HttpServletRequest req, HttpServletResponse res, HttpSession hs, Model m) { req.setAttribute("itemList", itemList); // 設置商品數據return "itemList";}@RequestMapping("productsCallbackStringByForward")// 處理器方法返回String, 通過forward方式public String productsCallbackStringByForward(HttpServletRequest req) { req.setAttribute("itemList", itemList); // 設置商品數據return "forward:/WEB-INF/jsp/itemList.jsp";}@RequestMapping("productsCallbackStringByRedirect")// 處理器方法返回String, 通過redirect方式// 請求地址欄中直接輸入地址無法之間訪問WEB-INF下的資源, redirect也不能訪問。public String productsCallbackStringByRedirect(HttpSession hs) { hs.setAttribute("itemList", itemList); // 設置商品數據return "redirect:itemList.jsp";}@RequestMapping("productsCallbackVoid")// 處理器方法返回voidpublic void productsCallbackVoid(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setAttribute("itemList", itemList); // 設置商品數據req.getRequestDispatcher("/WEB-INF/jsp/itemList.jsp").forward(req, res);} }5.4. 在src下, 編寫springmvc.xml
5.5. 在web.xml里配置請求路徑攔截、SpringMVC的前端控制器和加載SpringMVC的核心配置文件。
5.6. 編寫index.jsp
5.7. 由于重定向不能直接訪問WEB-INF下的資源, 所以我們在WebContent/item/和WebContent/WEB-INF/jsp/目錄下都編寫itemList.jsp(僅僅是為了演示)
5.8. 運行項目
5.9.?轉發的訪問結果
5.10.?重定向的訪問結果
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的003_Controller和RequestMapping注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 002_注解开发
- 下一篇: 004_SpringMVC分层配置文件