静态页面可以放在webapp目录下服务端动态页面放在WEB-INF目录,不让外部随意访问一、springmvc总览handler—处理请求信 息,进行响应拦截器异常处理—局部优先控制层的局部的异常处理方法全局的异常处理方法在控制层或@ControllerAdvice修 饰的类中@InitBinder@ModelAttribute@ExceptionHandler这些注解修饰的方法优先执行二、框图 从请求到处理,现到响应:请求—过滤器—前端控制器—拦截器—处理器拦截器接口的三个方法执行的时期:处理异常mvc中,每一层都可能存在 异常,若不处理,会在浏览器出现500异常ControllerExcetionServiceExcetionSQLException 三、springmvc整合步骤、编程详情1springmvc,maven依赖2web.xml配置前端控制器3spring-m vc.xmlxml方式:处理器映射器,处理器,视图解析器,拦截器声明注解方式:扫描包,xml配置-视图解析器、拦截器声明4ha ndler--(两个部分:请求参数信息---响应信息)方法注解:handler映射@RequestMapping--支持:R EST形式的URL:例-@RequestMapping(“xxx/{id}”--请求参数信息注入@PathVariab leStringid声明捕获异常@ExceptionHandler(value=Exception.class)–用于处 理异常的处理器(2)方法参数(请求参数信息,响应信息相关)使用@RequestParam描述方法参数,显示表示这是一个请求参数 ,(可修饰Map参数,数组)基本数据类型–参数名对应请求参数,可用于请求参数获取javabean对象接收多个参数数据–对象的s et方法实现注入请求参数信息@RequestMapping(value="group",method=RequestMethod. GET)@ResponseBodypublicStringwithParamGroup(Messagebean){//这 里不能加@RequestParam,否则映射不成功return"Obtainedparametergroup"+bea n;}ModelAndView可以存入数据和页面–响应相关Model–往其中放入信息,即是往请求域中存数据。(Model本身就是 一个LinkedHashMap)–响应相关一般的Map集合-往其中放入信息,即是往请求域中存入数据,同上–响应相关(3)返回值( 响应信息):String类型--方法上加@ResponseBody时,返回值代表响应实体--否则:返回值“xx”代表--请求 转发的--转向页面xx.jsp也可以做重定向(”redirect:xx.do”)ModelAndView对象--封装数据和页面5拦 截器Interceptor(1)定义拦截器HandlerInterceptor接口:三个方法,代表三个时期:1-目标handler 方法执行前,2-执行后,3-视图解析完成后--publicbooleanpreHandle(HttpServletReques targ0,HttpServletResponsearg1,Objectarg2)--publicvoidpostH andle(HttpServletRequestarg0,HttpServletResponsehttpServletRes ponse,Objectarg2,ModelAndViewmodelAndView)::::可以在这里额外添加或更改响应信 息--publicvoidafterCompletion(HttpServletRequestarg0,HttpServl etResponsearg1,Objectarg2,Exceptionarg3)::::可以在这里处理异常(2)配置拦截 器appingpath="/sys/"/>edu.interceptor.SysUserInterceptor"> mvc:interceptors>四、LRUCatche算法实现—课后作业很多缓存产品的实现,都是使用LRU(最近最少使用算法) 算法实现的!!!!课后作业:使用linkedHashMap写一个LRUCatche缓存使用HashMap再写一个LRUCatche 缓存--------------------------------------------五、json字符串(用作响应格式)-- 课后作业–轻量级的数据格式服务器与不同的客户端之间,为了格式统一,使用json进行数据传输------------------- ----------------------------------------------------js平台,json对象与j son字符串的互转vars1=JSON.stringify(o1);varo2=JSON.parse(s1);------ ----------------------------------------------------------------- 在java中,java对象与json字符串的互转1--Jackson相关jar包:三个maven依赖,自动三个y>com.fasterxml.jackson.corejackso n-databind2.9.22--调用 相关的API---ObjectMapper--将java对象转成json形式的字符串--将json格式的字符串转成java对象 例:ObjectMapperobjectMapper=newObjectMapper();Messagemessage =newMessage(1,"aaa");try{StringjsonStr=objectMapper.writeV alueAsString(message);System.out.println("jsonstr:"+jsonStr);mess age=objectMapper.readValue(jsonStr,Message.class);System.out.p rintln("message对象:"+message);六解决乱码问题返回值无法进行在HttpServletResponse中 进行编码设置@RequestMapping("doInsertObject")@ResponseBodypublicStr ingdoInsertObject(SysRolesysRole,HttpServletResponseresponse) {System.out.println(sysRole);introw=sysRoleService.insertObj ect(sysRole);response.setContentType("text/html;charset=utf-8"); response.getWriter().write("添加成功...3秒之后进行跳转);//不能和return同时使用r eturn"添加成功...3秒之后进行跳转...";//返回仍然中文乱码!!}改成下面这样就OK了:@RequestMapp ing("doInsertObject")publicvoiddoInsertObject(SysRolesysRole,Ht tpServletResponseresponse){System.out.println(sysRole);introw =sysRoleService.insertObject(sysRole);response.setContentType("text/html;charset=utf-8");response.setHeader("refresh","3;"+"showStarter.do");try{response.getWriter().write("添加成功...3秒之后进行跳转...");//中文正常了。。}catch(IOExceptione){e.printStackTrace();}} |
|