Http協議中的request

1.requset對象和response對象的原理

  1. request和response對象是由服務器創建的。我們使用他們
  2. request對象是來獲取請求消息,response對象是來設置響應消息的
    request

2.request:獲取請求消息

1.獲取請求行數據 Get /day14/demo1?name=zhangsan http/1.1

方法:
1.獲取請求方式:GET String getMethod()
2.獲取虛擬目錄:/day14 String getContextPath()
3.獲取servlet路徑:/demo1 String getServletPath()
4.獲取get方式請求參數:name=zhangsan String getQueryString()
5.獲取URL:/day14/demo1 String getRequestURI()
:http://localhost/day14/demo1 StringBuffer getRequestURL
URL:統一資源定位符 URI:統一資源標識符
6.獲取協議及版本: HTTP/1.1 String getProtocol()
7.獲取客戶機的IP地址:String getRemoteAddr()

@WebServlet("/requestDemo1")
public class request extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
        1.獲取請求方式:GET   String getMethod()
        2.獲取虛擬目錄:/day14   String getContextPath()
        3.獲取servlet路徑:/demo1   String getServletPath()
        4.獲取get方式請求參數:name=zhangsan    String getQueryString()
        5.獲取URL:/day14/demo1   String getRequestURI()        :http://localhost/day14/demo1  StringBuffer getRequestURL
        6.獲取協議及版本: HTTP/1.1  String getProtocol()
        7.獲取客戶機的IP地址:String getRemoteAddr()
         */
	//1.獲取請求方式:GET   String getMethod()
        String method = req.getMethod();
        System.out.println(method);
	//2.獲取虛擬目錄:/day14   String getContextPath()
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
	//3.獲取servlet路徑:/demo1   String getServletPath()
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
	//4.獲取get方式請求參數:name=zhangsan    String getQueryString()
        String queryString = req.getQueryString();
        System.out.println(queryString);
	//5.獲取URL:/day14/demo1   String getRequestURI()        :http://localhost/day14/demo1  StringBuffer getRequestURL
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
	//6.獲取協議及版本: HTTP/1.1  String getProtocol()
        String protocol = req.getProtocol();
        System.out.println(protocol);
	//7.獲取客戶機的IP地址:String getRemoteAddr()
        String remoteAddr = req.getRemoteAddr();
        System.out.println(remoteAddr);
   }
}

2.獲取請求頭數據:

*方法:
String getHeader(String name) //通過請求頭的名稱獲取請求頭的值
Enumeration<String> getHeaderName() //獲取所有的請求頭名稱請求頭:
Enumeration<String> headerNames = req.getHeaderNames();
while(headerNames.hasMoreElements()){
    String name=headerNames.nextElement();
    String value=req.getHeader(name);
    System.out.println(name+"---"+value);
}

user-agent: 判斷使用的瀏覽器請求頭:referer:判斷來源路徑

實例:

@WebServlet("/requestDemo3")
public class request2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //演示獲取請求頭:referer
        String referer = req.getHeader("referer");
        System.out.println(referer);
        if (referer != null) {
            if (referer.contains("/day14")) {
                System.out.println("播放電影");
            }else
                System.out.println("來我們網址吧!!!");
        }
    }
}
@WebServlet("/requestDemo2")
public class request1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //演示獲取請求頭:user-agent
        String agent=req.getHeader("user-agent");
        if(agent.contains("Chrome")){
            System.out.println("Chrome棒");
        }else if(agent.contains("firefox")){
            System.out.println("火狐棒");
        }
    }
}

3.獲取請求體數據:

*請求體:只有POST請求方式,纔有請求體,在請求體中封裝了POST請求的請求參數
*步驟:

1.獲取流對象:

  • BufferedReader getReader() :獲取字符輸入流,只能操作字符數據
@WebServlet("/requestDemo4")
public class request3 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //獲取請求消息體 --請求參數
        BufferedReader reader = req.getReader();
        //1.獲取字符流
        String line=null;
        while((line = reader.readLine()) != null){
            System.out.println(line);
        }
    }
}
  • ServletInputStream getInputStream(): 獲取字節輸入流,可以操作所有數據類型

4.其他功能:####

1.獲取請求
參數通用方式:(get post都能使用)

1.String getparameter(String name)    //根據參數獲取參數值 username=zs&&password=123
2.String[]  getparameterValues(String name)   //根據參數名稱獲取參數值的數組  hobby=xx&hobby=game
3.Enumeration<String> getParameterNames()  //獲取所有的參數名稱
4.Map<String,String[]> getParameter()  //獲取所有參數的Map集合

2.請求轉發: 一種在服務器內部的資源跳轉方式
1.步驟;
1.通過request對象獲取請求轉發器對象:RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher對象來進行轉發:forword(ServletRequest request,ServletResponse response)
2.特點:

  • 瀏覽器地址欄不發生變化
  • 只能轉發到當前服務器內部資源中
  • 只發送了一次請求
@WebServlet("/requestDemo5")
public class request4 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("requsetdemo4...");
        req.setAttribute("msg","hello");
        req.getRequestDispatcher("/requestDemo6").forward(req,resp);

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}
@WebServlet("/requestDemo6")
public class request5 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object msg = req.getAttribute("msg");
        System.out.println(msg);
        System.out.println("requestdemo5...");

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);  //這樣寫非必須
    }
}

3.共享資源:

  • 域對象:一個有作用範圍的對象,可以在範圍內共享數據
  • request域:代表一次請求的範圍,一般用於請求轉發的多個資源共享數據

方法:

  • void setAttribute(String name,Object obj):存儲數據
  • Object getAttitude(String name) :通過鍵獲取值
  • void removeAttribute(String name) :通過鍵移除鍵值對

4.獲取ServletContext:

ServletContext getServletContext()   //獲取Servlet對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章