基於批量刪除商品操做完成參數傳遞。html
Jsp修改java
控制器修改web
/** * 包裝pojo傳遞演示 * 次日,演示數組參數的傳遞與List的傳遞 * @param vo * @return */ @RequestMapping("queryItem") public String queryItem(QueryVo vo, Integer[] ids) { System.out.println(vo); //輸出傳入的數組 if (ids != null && ids.length > 0) { for (Integer id : ids) { System.out.println("傳入的商品列表分別爲:" + id); } } return "itemList"; }
基於批量修改商品操做完成參數傳遞。spring
Jsp修改json
控制器修改數組
POJO修改瀏覽器
參考第一天內容。session
新建msg.jspmvc
思想:作一個全局異常處理器,處理全部沒有處理過的運行時異經常使用於更友好地提示用戶。app
/** * 全局異常處理器 * @author Steven * */ public class CustomerException implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder, Exception e) { //記錄日誌 e.printStackTrace(); //錯誤消息 String msg = "很抱歉,系統發生異常了,請聯繫管理員"; //響應用戶錯誤提示 ModelAndView mav = new ModelAndView(); //返回錯誤消息 mav.addObject("msg", msg); //響應錯誤提示頁面 mav.setViewName("msg"); return mav; } }
/** * 自定義異常 * @author Steven * */ public class MyException extends Exception { //錯誤消息 private String msg; public MyException() { super(); } public MyException(String msg) { super(); this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
<!-- 配置多媒體處理器 -->
<!-- 注意:這裏id必須填寫:multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大上傳文件大小 -->
<property name="maxUploadSize" value="8388608" />
</bean>
//圖片上傳用MultipartFile接收文件 @RequestMapping(value = "updateItem", method = { RequestMethod.POST, RequestMethod.GET }) public String updateItem(Item item, Model model, MultipartFile picFile) throws Exception { // 圖片新名字 String name = UUID.randomUUID().toString(); // 圖片原名字 String oldName = picFile.getOriginalFilename(); // 後綴名 String exeName = oldName.substring(oldName.lastIndexOf(".")); File pic = new File("D:\\WebWork\\" + name + exeName); // 保存圖片到本地磁盤 picFile.transferTo(pic); // 更新商品圖片信息 item.setPic(name + exeName); itemServices.update(item); model.addAttribute("item", item); model.addAttribute("msg", "修改商品成功"); return "itemEdit"; }
7 json數據交互
/** * json數據交互演示 * * @param item2 * @return */ @RequestMapping("getItem") //@ResponseBody把pojo轉成json串響應用戶 @ResponseBody //@RequestBody用於接收用戶傳入json串轉成pojo public Item getItem(@RequestBody Item item2) { System.out.println("接收到的json商品數據爲:" + item2); Item item = itemServices.getItemById(3); return item; }
/** * RESTful風格演示 * * @param ids * @param model * @return */ //RESTful風格url上的參數經過{}點位符綁定 //點位符參數名與方法參數名不一致時,經過@PathVariable綁定 @RequestMapping("/item/{id}") public String testRest(@PathVariable("id") Integer ids, Model model) { Item item = itemServices.getItemById(ids); model.addAttribute("item", item); return "itemEdit"; }
測試直接訪問url{http://localhost:8080/項目名/item/1.action}便可。
/** * 自定義攔截器 * @author Steven * */ public class MyInterceptor1 implements HandlerInterceptor { //在Controller方法執行後被執行 //處理異常、記錄日誌 @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("MyInterceptor1.afterCompletion....."); } //在Controller方法執行後,返回ModelAndView以前被執行 //設置或者清理頁面共用參數等等 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("MyInterceptor1.postHandle....."); } //在Controller方法執行前被執行 //登陸攔截、權限認證等等 @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("MyInterceptor1.preHandle....."); //返回true放行,false攔截 return true; } }
<!-- 攔截器定義 --> <mvc:interceptors> <!-- 定義一個攔截器 --> <mvc:interceptor> <!-- path配置</**>攔截全部請求,包括二級以上目錄,</*>攔截全部請求,不包括二級以上目錄 --> <mvc:mapping path="/**"/> <bean class="com.itheima.springmvc.interceptor.MyInterceptor1" /> </mvc:interceptor> <!-- 定義一個攔截器 --> <mvc:interceptor> <!-- path配置</**>攔截全部請求,包括二級以上目錄,</*>攔截全部請求,不包括二級以上目錄 --> <mvc:mapping path="/**"/> <bean class="com.itheima.springmvc.interceptor.MyInterceptor2" /> </mvc:interceptor> </mvc:interceptors>
一、有一個登陸頁面,須要寫一個controller訪問頁面
二、登陸頁面有一提交表單的動做。須要在controller中處理。
a) 判斷用戶名密碼是否正確
b) 若是正確 想session中寫入用戶信息
c) 返回登陸成功,或者跳轉到商品列表
三、攔截器。
a) 攔截用戶請求,判斷用戶是否登陸
b) 若是用戶已經登陸。放行
c) 若是用戶未登陸,跳轉到登陸頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用戶登陸</title> </head> <body> <form action="${pageContext.request.contextPath }/user/login.action"> 用戶名:<input type="text" name="username" /><br> 密碼:<input type="password" name="password" /><br> <input type="submit"> </form> </body> </html>
/** * 登陸攔截器 * @author Steven * */ @Controller @RequestMapping("user") public class UserController { /** * 跳轉登陸頁面 * @return */ @RequestMapping("toLogin") public String toLogin(){ return "login"; } /** * 用戶登陸 * @return */ @RequestMapping("login") public String login(String username,String password,HttpSession session){ String result = "login"; //判定用戶是否容許登陸 if(username != null){ session.setAttribute("username", username); //登陸成功,跳轉商品列表 result = "redirect:/itemList.action"; } return result; } }
這裏省略類聲名和其它兩個方法。
//處理執行前被執行 //登陸攔截、權限驗證 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { Object attribute = request.getSession().getAttribute("username"); if(attribute != null){ //放行,執行處理器 return true; }else{ response.sendRedirect(request.getContextPath() + "/user/tologin.action"); //放行,執行處理器 return false; } }
<!-- 登陸攔截器 --> <mvc:interceptor> <!-- path配置</**>攔截全部請求,包括二級以上目錄,</*>攔截全部請求,不包括二級以上目錄 --> <mvc:mapping path="/**"/> <!-- 配置不攔截請求的地址 --> <!-- <mvc:exclude-mapping path="/user/toLogin.action"/> <mvc:exclude-mapping path="/user/login.action"/> --> <mvc:exclude-mapping path="/user/*"/> <bean class="com.itheima.springmvc.interceptor.LoginInterceptor" /> </mvc:interceptor>