欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb入門:HttpResponse和HttpRequest詳解

 更新時間:2021年07月16日 16:35:18   作者:寧在春  
這篇文章主要介紹了Django的HttpRequest和HttpResponse對象,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

HttpResponse 講解

HttpServletResponse概述:

​ 在創(chuàng)建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響應response。service方法中的response的類型是ServletResponse,而doGet/doPost方法的response的類型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加強大。

Response運行流程

img

響應頭有很多這里只介紹常用的。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bAvaDBGw-1620739367741)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511163256716.png)]

在瀏覽器可以按F12 抓包看響應頭、請求頭、具體的可以再查。

設置響應行

設置響應的狀態(tài)碼

/**
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test3")
public class HttpResponseTest3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("設置狀態(tài)碼,前臺通過判斷狀態(tài)碼,來判斷請求是否成功");
        resp.setStatus(404);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

測試

在這里插入圖片描述

設置響應頭

刷新 跳轉頁面

/**
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test4")
public class HttpResponseTest4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 設置響應頭 每1秒自動刷新
        System.out.println("設置響應頭 每1秒自動刷新");
        resp.setHeader("Refresh", "1");
        //定時跳轉 3秒后將自動跳轉
//        resp.setHeader("Refresh","3;URL=hello.jsp");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

測試

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LGJQhKor-1620739367743)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511162434487.png)]

一個小demo 實現(xiàn)刷新 頁面累加

/**
 * response
 * @author Adimi
 */
@WebServlet("/test4")
public class ResponseTest4 extends HttpServlet {
    private static Integer id=1;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setHeader("Refresh","1");
        PrintWriter writer = response.getWriter();
        id++;
        writer.print("id==>"+id);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

設置字符編碼 解決中文亂碼問題

/**
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test1")
public class HttpResponseTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解決中文亂碼問題
        // 設置響應頭
        // 設置字符編碼 resp.setCharacterEncoding("UTF-8");
        // 設置響應內容以什么格式展示到頁面 什么編碼格式 包含了設置字符編碼
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("中國,你好?。?!");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

測試

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5VCR2LeF-1620739367746)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511162823603.png)]

重定向 redirect

/**
 * 重定向
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test5")
public class HttpResponseTest5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("hello.jsp");
//        resp.setHeader("location","www.baidu.com"); 通過設置響應頭轉發(fā)
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

request轉發(fā)

/**
 * 重定向
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test5")
public class HttpResponseTest5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        resp.sendRedirect("hello.jsp");
        req.getRequestDispatcher("hello.jsp").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

重定向和轉發(fā)的區(qū)別

文件下載

獲取路徑資源

String path=this.getServletContext().getRealPath("WEB-INF\\classes\\8.jpg");

讀取資源

FileInputStream fileInputStream=new FileInputStream(path);

獲取到文件名,路徑在電腦上保存的形式是 \ \

String fileName=path.substring(path.lastIndexOf("\\")+1);

設置消息頭告訴瀏覽器,我要下載1.png這個圖片 設置編碼

resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

把讀取到的內容回送給瀏覽器

 int len=0;
byte[] bytes=new byte[1024];
// ServletOutputStream 提供用于將二進制數據發(fā)送到客戶端的輸出流
ServletOutputStream servletOutputStream=resp.getOutputStream();
while((len=fileInputStream.read(bytes))>0) {
    servletOutputStream.write(bytes,0,len);
}

關閉資源

servletOutputStream.close();
        fileInputStream.close();

注:8.jpg 放在我的resources 文件夾下 但是這里需要寫的是編譯完8.jpg存放的位置

具體代碼

/**
 * @Author: crush
 * @Date: 2021-05-09 19:40
 * version 1.0
 */
@WebServlet("/down")
public class ResponseDownFile extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //獲取路徑資源
        String path=this.getServletContext().getRealPath("WEB-INF\\classes\\8.jpg");
        //讀取資源
        FileInputStream fileInputStream=new FileInputStream(path);
        //獲取到文件名,路徑在電腦上保存的形式是\\
        String fileName=path.substring(path.lastIndexOf("\\")+1);
        //設置消息頭告訴瀏覽器,我要下載1.png這個圖片
        // 該方式文件名為中文時會亂碼
        //防止中文亂碼
        resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //把讀取到的內容回送給瀏覽器
        int len=0;
        byte[] bytes=new byte[1024];
        ServletOutputStream servletOutputStream=resp.getOutputStream();
        while((len=fileInputStream.read(bytes))>0) {
            servletOutputStream.write(bytes,0,len);
        }
        // 關閉資源
        servletOutputStream.close();
        fileInputStream.close();
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

HttpRequest 講解

HttpServletRequest概述

​ 我們在創(chuàng)建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響應response。service()方法中寫了根據請求方式的不同調用doget()和dopost().

service方法中的request的類型是ServletRequest,而doGet/doPost方法的request類型HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大.

Request 運行流程

img

獲取請求攜帶的參數

/**
 * @Author: crush
 * @Date: 2021-05-11 16:52
 * version 1.0
 */
@WebServlet("/request1")
public class RequestTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 這里是請求的參數名  必須是同名的 
        String username = req.getParameter("username"); 
        String password = req.getParameter("password");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>"+username+":"+password+"</h1>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2zxGslkb-1620739367750)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511170056042.png)]

獲取多個參數的值

  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 設置請求的編碼  不然會亂碼
        req.setCharacterEncoding("utf-8");
        Enumeration<String>  names = req.getParameterNames();
        while (names.hasMoreElements()) {
            String name = (String) names.nextElement();
            String[]  values = req.getParameterValues(name);
            System.out.println(name+":"+ Arrays.toString(values));
        }
    }

獲得請求行的信息

/**
 * @Author: crush
 * @Date: 2021-05-11 16:52
 * version 1.0
 */
@WebServlet("/request3")
public class RequestTest3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 獲得請求的url
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("請求的URL===>"+requestURL);
        // 獲得請求的Servlet的路徑
        String path = req.getServletPath();
        System.out.println("請求的Servlet的路徑===>"+path);
        //返回發(fā)出此請求的HTTP方法的名稱,例如GET,POST或PUT
        String method = req.getMethod();
        System.out.println("返回發(fā)出此請求的HTTP方法的名稱==>"+method);
        //返回發(fā)送請求的客戶端或最后一個代理的Internet協(xié)議(IP)地址
        String remoteAddr = req.getRemoteAddr();
        System.out.println("remoteAddr==>"+remoteAddr);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

request實現(xiàn)轉發(fā)

/**
 * @Author: crush
 * @Date: 2021-05-11 16:52
 * version 1.0
 */
@WebServlet("/request2")
public class RequestTest2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 訪問request2 轉發(fā)到 request4去
        req.getRequestDispatcher("/request4").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

request是一個域對象

request對象也是一個存儲數據的區(qū)域對象,所以也具有如下方法:

setAttribute(String name, Object o)

getAttribute(String name)

removeAttribute(String name)

ServletContext 作用域:

創(chuàng)建:啟動web應用程序的時候創(chuàng)建

銷毀:關閉web應用程序的時候銷毀

域的作用范圍:整個web應用的啟動周期

request作用域:

創(chuàng)建:訪問時創(chuàng)建request

銷毀:響應結束request銷毀

域的作用范圍:一次請求中

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • Java獲取項目路徑方式System.getProperty(“user.dir“)

    Java獲取項目路徑方式System.getProperty(“user.dir“)

    這篇文章主要介紹了Java獲取項目路徑方式System.getProperty(“user.dir“),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解BeanUtils.copyProperties()方法如何使用

    詳解BeanUtils.copyProperties()方法如何使用

    這篇文章主要為大家介紹了詳解BeanUtils.copyProperties()方法如何使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java實現(xiàn)統(tǒng)計字符串出現(xiàn)的次數

    Java實現(xiàn)統(tǒng)計字符串出現(xiàn)的次數

    這篇文章主要為大家詳細介紹了Java實現(xiàn)統(tǒng)計字符串出現(xiàn)的次數,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Mybatis mapper接口動態(tài)代理開發(fā)步驟解析

    Mybatis mapper接口動態(tài)代理開發(fā)步驟解析

    這篇文章主要介紹了Mybatis mapper接口動態(tài)代理開發(fā)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java中防止XSS攻擊的10種方法

    Java中防止XSS攻擊的10種方法

    這篇文章主要給大家介紹了關于Java中防止XSS攻擊的10種方法,XSS(Cross Site Scripting)攻擊是一種常見的網絡安全漏洞,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-07-07
  • 話說Spring Security權限管理(源碼詳解)

    話說Spring Security權限管理(源碼詳解)

    本篇文章主要介紹了話說Spring Security權限管理(源碼詳解) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • SpringCloud讓微服務實現(xiàn)指定程序調用

    SpringCloud讓微服務實現(xiàn)指定程序調用

    這篇文章主要介紹了SpringCloud讓微服務實現(xiàn)指定程序調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • SWT(JFace)體驗之StyledText類

    SWT(JFace)體驗之StyledText類

    有的時候Text需要實現(xiàn)這種那種的樣式。先提供在不使用StyledText類的情況:
    2009-06-06
  • java中int初始化可以為0,但不能為NULL問題

    java中int初始化可以為0,但不能為NULL問題

    這篇文章主要介紹了java中int初始化可以為0,但不能為NULL問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • idea復制module(項目)并在一個窗口展示的教程詳解

    idea復制module(項目)并在一個窗口展示的教程詳解

    這篇文章主要介紹了idea復制module(項目)并在一個窗口展示的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論