异常处理器:
CustomerExceptionResolver.java类:自定义异常类 public class CustomerExceptionResolver implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) { //发生异常的地方service层,方法 包名+类名+方法 //日志 文件1.发布之后看不到异常2.发布的tomcat在服务器上linux ModelAndView mav=new ModelAndView(); mav.addObject("error","未知异常"); mav.setViewName("error"); return mav; } }
在springmvc.xml配置一场处理器 <!-- springmvc的异常处理器 --> <bean class="com.itheima.springmvc.exception.CustomerExceptionResolver">
在ItemController.java中设置一个异常: @RequestMapping(value="/item/itemlist.action") public String exception(Model model){ Integer i=1/0;//会抛出异常 List<Items> list=itemService.selectItemsList(); model.addAttribute("itemList",list); return "itemList"; }图片文件上传:
tomcat双击在modules里面添加add external web module在本地d盘创建upload目录,path写/pic这样通过
<!-- 上传图片是需要指定属性 enctype="multipart/form-data" -->
springmvc.xml中配置图片文件上传,配置是固定的 <!-- 上传图片配置实现类 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传图片大小单位为B --> <property name="maxUpdoadSize" value="5000000"/> </bean>
ItemController.java: //提交修改页面 入参为Items对象 提交表单按钮跳转update. @RequestMapping(value="/updateitem.action") public String updateitem(QueryVo vo,MultipartFile pictureFile) throws IllegalStateException, IOException{ //保存图片到d:upload String name=UUID.randomUUID().toString().replaceAll("-",""); String ext=FilenameUtils.getExtension(pictureFile.getOriginalFilename()); pictureFile.transferTo(new File("D:\\upload\\" + name+"."+ext)); vo.getItems().setPic(name+"."+ext); //修改 itemService.updateItemsById(vo.getItems()); //ModelAndView mav=new ModelAndView(); //mav.setViewName("success"); return "redirect:/itemEdit.action?id="+vo.getItems().getId(); }json数据交互
jsp页面写ajax请求:
<script type="text/javascript"> $(function(){ var params='{"id":1,"name":"测试商品","price":99.9,"detail":"测试","pic":"timg.jpg"}'; $.ajax({ url:"${pageContext.request.contextPath}/json.action", data:params, contentType:"application/json;charset=UTF-8",//发送数据格式 type:"post", dataType:"json",//回掉 success:function(data){ alert(data.name); } }); }); </script>@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。
@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端
@PathVariable是获取url上数据的。@RequestParam获取请求参数的(包括post表单提交)
ItemController.java: //json数据交互 @RequestMapping(value="/json.action") public @ResponseBody Items json(@RequestBody Items items){ return items; }拦截器执行规则:
preHandler按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只要preHandler返回true才调用
在springmvc.xml中配置拦截器:
<!-- springmvc拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 自定义的拦截器类 --> <bean class="com.itheima.springmvc.interceptor.Interceptor"/> </mvc:interceptor> </mvc:interceptors>
自定义拦截器类Interceptor.java: public class Interceptor implements HandlerInterceptor{} 拦截器应用:登录功能 login.jsp: <body> <form action="${pageContext.request.contextPath }/login.action" method="post"> 用户名:<input type="text" name="username" value="abc"> <input type="submit" value="提交"/> </form> </body> 自定义的拦截器类:Interceptor.java: public class Interceptor implements HandlerInterceptor{ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { System.out.println("方法前"); //判断用户是否登录,如果没有登录重定向到登录页面,如果登录了就放行 //URI /login.action //URL: http://www.baidu.com String requestURI=request.getRequestURI(); if(!requestURI.contains("/login")){ String username=(String) request.getSession().getAttribute("USER_SESSION"); if(null==username){ response.sendRedirect(request.getContextPath()+"/login.action"); return false; } } return true; } } ItemController.java: //去登陆的页面 @RequestMapping(value="/login.action",method=RequestMethod.GET) public String login(){ return "login"; } @RequestMapping(value="/login.action",method=RequestMethod.POST) public String login(String username,HttpSession session){ session.setAttribute("USER_SESSION", username); return "redirect:/item/itemlist.action"; }