spring boot之http,頁面狀態跳轉與異常處理實戰

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     }

 

  顯示結果:cookie

HttpServletResponse

  添加cookie並在頁面上顯示:session

 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     }

 

 顯示結果:app

  備註:在url中把key寫入cookieid,顯示時,cookieid就會顯示value值,隨value的改變而改變。函數

301,302頁面跳轉與HttpSession

  若訪問/redirect/301,就永久跳轉到/hello下(301),不通過判斷。不然暫時性跳轉(302)。ui

 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路徑:url

 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函數中處理異常。spa

 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"時:3d

  

  結果二,key!="admin"時:

  

相關文章
相關標籤/搜索