本文以商品修改為例,記錄springmvc的注解開發,包括mapper,service,controller,@RequestMapping,controller方法的返回值等
操作流程:
1.進入商品查詢列表頁面 2.點擊修改,進入商品修改頁面,頁面中顯示了要修改的商品。要修改的商品從數據庫查詢,根據商品id(主鍵)查詢商品信息 3.在商品修改頁面,修改商品信息,修改後,點擊提交mapper:
根據id查詢商品信息 根據id更新Items表的數據不用開發了,使用逆向工程生成的代碼。
在com.iot.learnssm.firstssm.service.ItemsService
中添加兩個接口
//根據id查詢商品信息
/**
*
*
Title: findItemsById
*
Description:
* @param id 查詢商品的id * @return * @throws Exception */ ItemsCustom findItemsById(Integer id) throws Exception; //修改商品信息 /** * *
Title: updateItems
*
Description:
* @param id 修改商品的id * @param itemsCustom 修改的商品信息 * @throws Exception */ void updateItems(Integer id,ItemsCustom itemsCustom) throws Exception;
在com.iot.learnssm.firstssm.service.impl.ItemsServiceImpl
中實現接口,增加itemsMapper
屬性
@Autowired
private ItemsMapper itemsMapper;
public ItemsCustom findItemsById(Integer id) throws Exception {
Items items = itemsMapper.selectByPrimaryKey(id);
//中間對商品信息進行業務處理
//....
//返回ItemsCustom
ItemsCustom itemsCustom = new ItemsCustom();
//將items的屬性值拷貝到itemsCustom
BeanUtils.copyProperties(items, itemsCustom);
return itemsCustom;
}
public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
//添加業務校驗,通常在service接口對關鍵參數進行校驗
//校驗 id是否為空,如果為空拋出異常
//更新商品信息使用updateByPrimaryKeyWithBLOBs根據id更新items表中所有字段,包括 大文本類型字段
//updateByPrimaryKeyWithBLOBs要求必須轉入id
itemsCustom.setId(id);
itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
}
方法:
商品信息修改頁面顯示 商品信息修改提交
//使用@Controller來標識它是一個控制器
@Controller
//為了對url進行分類管理 ,可以在這裡定義根路徑,最終訪問url是根路徑+子路徑
//比如:商品列表:/items/queryItems.action
[email protected]("/items")
public class ItemsController {
@Autowired
private ItemsService itemsService;
//商品查詢列表
@RequestMapping("/queryItems")
//實現 對queryItems方法和url進行映射,一個方法對應一個url
//一般建議將url和方法寫成一樣
public ModelAndView queryItems() throws Exception{
//調用service查找數據庫,查詢商品列表
List itemsList = itemsService.findItemsList(null);
//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//相當於request的setAttribute方法,在jsp頁面中通過itemsList取數據
modelAndView.addObject("itemsList",itemsList);
//指定視圖
//下邊的路徑,如果在視圖解析器中配置jsp的路徑前綴和後綴,修改為items/itemsList
//modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
//下邊的路徑配置就可以不在程序中指定jsp路徑的前綴和後綴
modelAndView.setViewName("items/itemsList");
return modelAndView;
}
//商品信息修改頁面顯示
@RequestMapping("/editItems")
//限制http請求方法,可以post和get
[email protected](value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
public ModelAndView editItems()throws Exception {
//調用service根據商品id查詢商品信息
ItemsCustom itemsCustom = itemsService.findItemsById(1);
// 返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//將商品信息放到model
modelAndView.addObject("itemsCustom", itemsCustom);
//商品修改頁面
modelAndView.setViewName("items/editItems");
return modelAndView;
}
//商品信息修改提交
@RequestMapping("/editItemsSubmit")
public ModelAndView editItemsSubmit(HttpServletRequest request, Integer id, ItemsCustom itemsCustom)throws Exception {
//調用service更新商品信息,頁面需要將商品信息傳到此方法
itemsService.updateItems(id, itemsCustom);
//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//返回一個成功頁面
modelAndView.setViewName("success");
return modelAndView;
}
}
@RequestMapping
定義controller方法對應的url,進行處理器映射使用。
窄化請求映射
//使用@Controller來標識它是一個控制器
@Controller
//為了對url進行分類管理 ,可以在這裡定義根路徑,最終訪問url是根路徑+子路徑
//比如:商品列表:/items/queryItems.action
@RequestMapping("/items")
public class ItemsController {
限制http請求方法
出於安全性考慮,對http的鏈接進行方法限制。
//商品信息修改頁面顯示
[email protected]("/editItems")
//限制http請求方法,可以post和get
@RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
public ModelAndView editItems()throws Exception {
如果限制請求為post方法,進行get請求,即將上面代碼的注解改為@RequestMapping(value="/editItems",method={RequestMethod.POST})
報錯,狀態碼405:
ModelAndView
需要方法結束時,定義ModelAndView,將model和view分別進行設置。
返回string如果controller方法返回string
1.表示返回邏輯視圖名。
真正視圖(jsp路徑)=前綴+邏輯視圖名+後綴
@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
[email protected]裡邊指定request傳入參數名稱和形參進行綁定。
//通過required屬性指定參數是否必須要傳入
//通過defaultValue可以設置默認值,如果id參數沒有傳入,將默認值和形參綁定。
//public String editItems(Model model, @RequestParam(value="id",required=true) Integer items_id)throws Exception {
public String editItems(Model model)throws Exception {
//調用service根據商品id查詢商品信息
ItemsCustom itemsCustom = itemsService.findItemsById(1);
//通過形參中的model將model數據傳到頁面
//相當於modelAndView.addObject方法
model.addAttribute("itemsCustom", itemsCustom);
return "items/editItems";
}
2.redirect重定向
商品修改提交後,重定向到商品查詢列表。
redirect重定向特點:浏覽器地址欄中的url會變化。修改提交的request數據無法傳到重定向的地址。因為重定向後重新進行request(request無法共享)
//重定向到商品查詢列表
//return "redirect:queryItems.action";
3.forward頁面轉發
通過forward進行頁面轉發,浏覽器地址欄url不變,request可以共享。
//頁面轉發
return "forward:queryItems.action";
返回void
在controller方法形參上可以定義request和response,使用request或response指定響應結果:
1.使用request轉向頁面,如下:
request.getRequestDispatcher("頁面路徑").forward(request, response);
2.也可以通過response頁面重定向:
response.sendRedirect("url")
3.也可以通過response指定響應結果,例如響應json數據如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");