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"时:
|