1、SpringMVC课堂笔记1 SpringMVC课堂笔记2 高级参数绑定2.1 数组类型的参数绑定基于批量删除商品操作完成参数传递。Jsp修改控制器修改/* * 包装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
2、) System.out.println(传入的商品列表分别为: + id); return itemList; 2.2 List类型的绑定基于批量修改商品操作完成参数传递。Jsp修改控制器修改POJO修改3 RequestMapping注解的使用3.1 路径映射可以是数组3.2 RequestMapping可以加在类头部,用于目录分级管理3.3 限定请求方法4 Controller方法返回值4.1 返回ModelAndView参考第一天内容。4.2 返回void4.2.1 request新建msg.jsp4.2.2 response4.3 返回String4.3.1 返回视图名字,参考第一天
3、内容4.3.2 redirect与forward5 Springmvc中异常处理思想:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好地提示用户。5.1 步骤5.1.1 创建全局异常处理器/* * 全局异常处理器 * author Steven * */public class CustomerException implements HandlerExceptionResolver Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse respo
4、nse, Object hanlder, Exception e) /记录日志 e.printStackTrace(); /错误消息 String msg = 很抱歉,系统发生异常了,请联系管理员; /响应用户错误提示 ModelAndView mav = new ModelAndView(); /返回错误消息 mav.addObject(msg, msg); /响应错误提示页面 mav.setViewName(msg); return mav; 5.1.2 配置异常处理器5.1.3 测试访问queryVoid.action5.1.4 更智能、更友好的提示,解决方案5.1.4.1 新建自定义异
5、常类/* * 自定义异常 * 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; 5.1.4.2 修改异常处理器,加上异常判断5.1.4.3
6、测试访问queryVoid.action6 图片上传处理6.1 配置虚拟目录6.2 加入上传功能需要的jar包6.3 配置多媒体解析器 6.4 jsp修改6.5 编写图片上传处理代码/图片上传用MultipartFile接收文件 RequestMapping(value = updateItem, method = RequestMethod.POST, RequestMethod.GET ) public String updateItem(Item item, Model model, MultipartFile picFile) throws Exception / 图片新名字 Stri
7、ng 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.
8、update(item); model.addAttribute(item, item); model.addAttribute(msg, 修改商品成功); return itemEdit; 7 json数据交互7.1 加入jar包7.2 编码/* * json数据交互演示 * * param item2 * return */ RequestMapping(getItem) /ResponseBody把pojo转成json串响应用户 ResponseBody /RequestBody用于接收用户传入json串转成pojo public Item getItem(RequestBody Ite
9、m item2) System.out.println(接收到的json商品数据为: + item2); Item item = itemServices.getItemById(3); return item; 7.3 测试,安装google浏览器测试工具详情可查看教案上的安装谷歌浏览器工具节点8 Springmvc实现Restful8.1 编码/* * RESTful风格演示 * * param ids * param model * return */ /RESTful风格url上的参数通过点位符绑定 /点位符参数名与方法参数名不一致时,通过PathVariable绑定 RequestM
10、apping(/item/id) public String testRest(PathVariable(id) Integer ids, Model model) Item item = itemServices.getItemById(ids); model.addAttribute(item, item); return itemEdit; 8.2 测试测试直接访问urlhttp:/localhost:8080/项目名/item/1.action即可。9 拦截器9.1 拦截器开发流程9.1.1 创建拦截器9.1.1.1 一号拦截器/* * 自定义拦截器 * author Steven *
11、 */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方法执行后,返回
12、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
13、 arg0, HttpServletResponse arg1, Object arg2) throws Exception System.out.println(MyInterceptor1.preHandle.); /返回true放行,false拦截 return true; 9.1.1.2 二号拦截器,复制一号,修改一下系统输出消息9.1.2 配置拦截器 !- path配置拦截所有请求,包括二级以上目录,拦截所有请求,不包括二级以上目录 - !- path配置拦截所有请求,包括二级以上目录,拦截所有请求,不包括二级以上目录 - 9.1.3 测试流程,可参考教案9.2 拦截器案例应用,登录
14、拦截器9.2.1 思路1、有一个登录页面,需要写一个controller访问页面2、登录页面有一提交表单的动作。需要在controller中处理。a) 判断用户名密码是否正确b) 如果正确 想session中写入用户信息c) 返回登录成功,或者跳转到商品列表3、拦截器。a) 拦截用户请求,判断用户是否登录b) 如果用户已经登录。放行c) 如果用户未登录,跳转到登录页面。9.2.2 login.jsp用户登录用户名:密码:9.2.3 UserController/* * 登录拦截器 * author Steven * */ControllerRequestMapping(user)public
15、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
16、(username, username); /登录成功,跳转商品列表 result = redirect:/itemList.action; return result; 9.2.4 LoginInterceptor拦截器编码这里省略类声名和其它两个方法。/处理执行前被执行 /登录拦截、权限验证 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; 9.2.5 拦截器配置 !- path配置拦截所有请求,包括二级以上目录,拦截所有请求,不包括二级以上目录 - !- -
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1