Http使用
http的使用主要是三个类:HttpServletRequest(向客户端取数据),HttpServletResponse(向客户端发数据),HttpSession(记录浏览器和服务器的长期交互)。
HttpServletRequest
取出http的请求头的参数和cookie数据:
1 @RequestMapping(path= {"/request"}) 2 @ResponseBody 3 public String request(HttpServletRequest request, 4 HttpServletResponse response, 5 HttpSession session) { 6 StringBuilder sb = new StringBuilder(); 7 Enumeration<String> headerNames = request.getHeaderNames(); 8 while(headerNames.hasMoreElements()) { 9 String name = headerNames.nextElement(); 10 sb.append(name + " ::::::::::::::::::::::::::::: " + request.getHeader(name) + "<br/>"); 11 } 12 for (Cookie cookie : request.getCookies()) { 13 sb.append("Cookie: "); 14 sb.append(cookie.getName()); 15 sb.append(":"); 16 sb.append(cookie.getValue()); 17 sb.append("<br>"); 18 } 19 return sb.toString(); 20 }
显示结果:
HttpServletResponse
添加cookie并在页面上显示:
1 @RequestMapping(value= {"/response"}) 2 @ResponseBody 3 public String response( @CookieValue(value = "cookieid", defaultValue = "cookieId") String cookieId, 4 @RequestParam(value = "key", defaultValue = "key") String key, 5 @RequestParam(value = "value", defaultValue = "value") String value, 6 HttpServletResponse response) { 7 response.addCookie(new Cookie(key, value)); 8 //response.addHeader(key, value); 9 return "cookievalue: " + cookieId; 10 }
显示结果:
备注:在url中把key写入cookieid,显示时,cookieid就会显示value值,随value的改变而改变。
301,302页面跳转与HttpSession
若访问/redirect/301,就永久跳转到/hello下(301),不经过判断。否则暂时性跳转(302)。
1 //301永久性跳转 2 //302暂时性跳转 3 @RequestMapping(path = {"/redirect/{code}"}) 4 @ResponseBody 5 public RedirectView redirect(@PathVariable("code") int code, 6 HttpSession session) { 7 RedirectView red = new RedirectView("/hello", true); 8 if (code == 301) 9 red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);//301跳转 10 //session,记录浏览器和服务器长期的交互。 11 session.setAttribute("msg", "jump from redirect"); 12 return red; 13 }
其次,/hello路径:
1 @RequestMapping(path = {"/hello"}) 2 @ResponseBody 3 public String Hello_World(Model model, 4 HttpSession session) { 5 model.addAttribute("aaa", "naive"); 6 model.addAttribute("l", "<br/>"); 7 List<String> ls = Arrays.asList(new String[] {"1","111", "2323a"}); 8 model.addAttribute("liststring", ls); 9 model.addAttribute("user", new User("aw12")); 10 logger.info("yeah,finally i learn how to use logger"); 11 //显示session的msg信息。 12 return "session" + session.getAttribute("msg") + sss.show(); 13 }
异常及异常处理
当key的值不是admin时,抛出异常,在exception函数中处理异常。
1 //异常 2 @RequestMapping(path = {"/admin"}) 3 @ResponseBody 4 public String error(@RequestParam(value = "key", required = false) String key) { 5 if ("admin".equals(key)) 6 return "hello admin"; 7 throw new IllegalArgumentException("Key 错误"); 8 } 9 //处理异常 10 @ExceptionHandler 11 @ResponseBody 12 public String exception(Exception e) { 13 return "error" + e.getMessage(); 14 }
结果一,key=‘admin"时:
结果二,key!="admin"时: