0057 Spring MVC如何獲取HTTP請求頭信息--URL中的動態參數--@RequestHeader--@CookieValue--@PathVariable


獲取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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM