獲取HTTP請求頭信息
一個HTTP請求除了有參數和實體內容外還有HTTP請求頭信息,Spring MVC也可以獲取這部分信息
@RequestHeader解可以將請求頭信息映射到處理方法的形參上
@CookieValue注解可以將Cookie映射到形參上
寫個controller
package net.sonng.mvcdemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HeaderController {
@RequestMapping(value="/getHeader",method=RequestMethod.GET)
public ModelAndView getHeader(
@RequestHeader("Host") String host,
@RequestHeader("User-Agent") String userAgent,
@RequestHeader("Accept") String accept,
@RequestHeader("Accept-Language") String acceptLanguage,
@RequestHeader("Accept-Encoding") String acceptEncoding,
@RequestHeader("Cookie") String cookie,
@RequestHeader("Connection") String conn,
@CookieValue("JSESSIONID") String cookie2){
//@RequestHeader將http請求頭信息賦值給形參
//@CookieValue直接將請求頭中的cookie的值賦值給形參
ModelAndView mav=new ModelAndView();
mav.addObject("host", host);
mav.addObject("userAgent", userAgent);
mav.addObject("accept", accept);
mav.addObject("acceptLanguage", acceptLanguage);
mav.addObject("acceptEncoding", acceptEncoding);
mav.addObject("cookie", cookie);
mav.addObject("conn", conn);
mav.addObject("cookie2", cookie2);
mav.setViewName("result"); //返回值是個字符串,就是視圖名
return mav;
}
}
寫個result.jsp作視圖
<%@page pageEncoding="utf-8"
contentType="text/html;charset=utf-8" %>
<html>
<head>
<title>返回結果</title>
</head>
<body style="color:blue;font-size:18px">
您的請求頭信息為:<br>
Host: ${host }<br><br><br>
User-Agent: ${userAgent }<br><br><br>
Accept: ${accept }<br><br><br>
Accept-Language: ${acceptLanguage }<br><br><br>
Accept-Encoding: ${acceptEncoding }<br><br><br>
Cookie: ${cookie }<br><br><br>
Connection: ${conn }<br><br><br>
cookie2:${cookie2 }<br><br><br>
</body>
</html>
直接訪問,可以看到jsp頁面列出了這個http請求的頭信息和cookie
您的請求頭信息為:
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: {JSESSIONID=javax.servlet.http.Cookie@3c915cc} //奇怪的是,輸出的是個Cookie對象
Connection: keep-alive
cookie2:304FDCF278E823F2F2B8850BD7B8B8DC
獲取請求URL中的動態參數
@PathVariable注解可以獲取請求URL中的動態參數,這樣就把url中“?”后面或者http實體中的部分參數,轉移到了一個url中,多個url就映射到了一個方法上
寫個Controller
package net.sonng.mvcdemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PathVariableTestController {
@RequestMapping("/book/{isbn}") //@PathVariable把url中的動態參數傳遞給了形參,這里的{isbn}貌似還支持正則
public String path(@PathVariable("isbn") String bookid,Model model){
model.addAttribute("isbn", bookid);
return "result";
}
}
視圖result.jsp
<%@page pageEncoding="utf-8"
contentType="text/html;charset=utf-8" %>
<html>
<head>
<title>返回結果</title>
</head>
<body style="color:blue;font-size:18px">
您請求的書籍的ISBN為:${isbn }
</body>
</html>
直接請求:http://localhost:8080/mvcdemo/book/9787111336242 ,輸出如下:
您請求的書籍的ISBN為:9787111336242