亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web復習day04:response

發布時間:2020-03-25 10:36:01 來源:網絡 閱讀:382 作者:dylan的賬號 欄目:開發技術

回顧:

request: 請求信息對象

Http協議: 瀏覽器和服務器進行數據交互時,數據的一種規范

請求行: 請求方式 請求路徑?get請求參數 協議/版本(http/1.1)

    getMethod()

    getContextPath()

    getRemoteAddr()

    getLocalPort()

請求頭: key/values

    getHeader("頭名稱");

        重要頭:

            referer: 防盜鏈

            user-agent: 用戶代理

            cookie:

請求體: post請求時攜帶的參數(get請求沒有請求體)

    獲取請求參數: ★★★ 瀏覽器攜帶的參數,我們所獲取的都是字符串

        String getParameter("名稱");

        String[] getParameterValues("名稱");

        Map<String,String[]> getParameterMap("名稱");

    BeanUtils:

        populate(實體對象,map集合);

Request作用域和請求轉發:

請求轉發: 一次請求的延續(可以經過多個servlet)

    request.getRequestDispatcher("/請求轉發的地址").forWard(req,resp);

作用域:

    request.setAttribute(String,Object);

        // 設置相同名稱的屬性就是 修改

    request.getAttribute(String);

    request.removeAttribute(String);

http協議-響應

響應: 服務器給瀏覽器的內容

組成:

響應行 響應頭 響應體

響應行

格式:

    協議/版本 響應的狀態碼 (狀態碼說明)

        tomcat8.5中沒有響應狀態碼說明了

    eg: HTTP/1.1 200 OK    tomcat7

狀態碼:

    1xx :請求已發送

    2xx :響應已完成

        200:響應成功(請求成功)

    3xx :需要瀏覽器進一步操作才可以完成

        302:重定向(配合location頭使用)

        304:讀緩存

    4xx :用戶訪問錯誤

        404:用戶訪問的資源不存在

    5xx :服務器內部錯誤

        500:服務器內部異常

響應頭

格式:

     key/values的格式 (values可以為多個值的)

常見的響應頭

    Location: http://www.it315.org/index.jsp        --跳轉方向

    Server:apache tomcat                            --服務器型號

    Content-Encoding: gzip                      --數據壓縮

    Content-Length: 80                          --數據長度

    Content-Language: zh-cn                         --語言環境

    Content-Type: text/html; charset=utf-8      --數據類型(MIME類型)  大類型/小類型 text/javascript 

        index.html   text/html

        設置響應文件的mime類型

        設置響應流的編碼方式

        通知瀏覽器使用指定的編碼解析

    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT    --最后修改時間

    Refresh: 1(秒);url=http://www.it315.org          --定時刷新

    Content-Disposition: attachment; filename=aaa.zip   --下載 用于文件下載  附件

    Set-Cookie:SS=Q0=5Lb_nQ; path=/search

重點的頭:

    Content-Type  Refresh  Content-Disposition  Location   Set-Cookie 

響應體

瀏覽器解析的內容
response★

設置服務器發送給瀏覽器的內容

HttpServletResponse

操作響應行:

協議/版本 狀態碼(說明)

常用方法

    (理解)setStatus(int code):針對1   2   3 開頭的

    (了解)sendError(int code):針對 4   5 開頭的

操作響應頭:

格式: key/values

常用方法

    (重點)setHeader(String name,String value);  // 設置一個字符串形式的響應頭

    sendRedirect("路徑");  // 重定向

常見的響應頭

location:重定向

        方式1: 需要配合302狀態碼一起使用 (了解)

            response.setStatus(302);

            response.setHeader("location","絕對路徑");

            路徑:絕對路徑

        方式2: (掌握)

            response.sendRedirect("路徑");

        重定向發送的是多次請求

        重定向不可以共享request對象(因為發送的是多次請求)

        重定向時瀏覽器地址欄顯示的是最后一次的地址

        重定向可以跳轉到任何路徑

refresh:定時刷新

        response.setHeader("refresh","秒數;url=跳轉的路徑"); 幾秒之后跳轉到指定的路徑上

content-type:設置文件的mime類型

        設置響應文件的mime類型 

        設置響應流的編碼方式

        通知瀏覽器使用指定的編碼解析

        方式1: 了解

            response.setHeader("content-type","mime類型;charset=編碼");

            response.setHeader("content-type","text/html;charset=utf-8");

        方式2: 掌握

            response.setContentType("文件的mime類型;charset=utf-8");

content-disposition:文件下載專用頭

        response.setHeader("content-disposition","attachment;filename="+文件名稱);

操作響應體:

常用方法:

    PrintWriter getWriter():字符流

    ServletOutputStream getOutputStream():字節流

    注意事項:

        自己編寫的文件   一般都使用字符流輸出 如:txt  html等

        音頻,視頻等文件使用字節流輸出

        ==字節流和字符流互斥,不能同時使用==    

        服務器會幫我們釋放資源,建議自己關閉;底層使用的緩存流

ServletContext:

上下文對象,全局管理者,知曉一個項目中所有Servlet的一切信息

作用:

獲取文件的mime類型    *.html     text/html     

資源共享

獲取資源的完整路徑

生命周期:

創建:

當服務器啟動的時候,服務器會為每一個項目創建servletcontext對象,一個項目只有一個servletcontext對象

銷毀:

項目從服務器上移除或者服務器關閉的時候

servletContext對象與項目共存亡

獲取方式:

方式1:通過ServletConfig對象獲取

    ServletConfig().getServletContext();

方式2:通過getServletContext方法獲取 ★★★

    getServletContext();

常用方法(API):

(掌握)獲取一個文件的mime類型

    String getMimeType(String 文件名)  

(掌握)資源共享: 相當于一個map集合

    setAttribute(String name,Object value): 設置

        設置相同名稱的屬性就是修改

    getAttribute(String name):獲取指定的屬性值

    removeAttribute(String name):移除指定的屬性

(掌握)獲取資源在服務器上的路徑

    String getRealPath(String filepath)

    注意:

        filepath:直接從項目的根目錄開始寫

        getRealPath("/")  ---> d:/tomcat/webapps/day14

案例

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function isIE(){ // 判斷用戶使用的瀏覽器是否為IE瀏覽器
            //獲取當前瀏覽器相關信息
            var explorer = window.navigator.userAgent.toLowerCase() ;
            //判斷是否是ie瀏覽器
            if (explorer.indexOf("msie") >= 0 || explorer.indexOf("rv:11.0) like gecko") >=
                0)     {
                return true;
            }else {
                return false;
            }
        }
        window.onload = function () { // 頁面加載成功事件
            if(isIE()){
                //在是IE瀏覽器的情況下,對中文請求參數編碼
                var str = document.getElementById("ww").href;
                str = encodeURI(str);
                document.getElementById("ww").href = str;
            }
        };

        function changeImg(obj) {
            //alert(1);
            obj.src = "anli5?aa="+new Date().getTime();
        }
    </script>
</head>
<body>
    <h4>response對象的相關操作</h4>
    <a href="refresh">3秒鐘之后跳轉到黑馬官網(定時刷新)</a> <br>
    <a href="my?money=40">案例2-班長借錢(重定向)</a> <br>
    <a href="anli3">案例3-返回中文無亂碼</a> <br>
    <a href="body">操作響應體</a> <br>
    <hr>
    <h4>上下文對象</h4>
    <a href="getMime?filename=aa.js">通過上下文對象獲取文件的mime類型</a> <br>
    <a href="setAttr">向上下文對象中設置屬性</a> <br>
    <a href="getAttr">從上下文對象中獲取屬性</a> <br>
    <a href="updateAttr">修改上下文對象中的屬性</a> <br>
    <a href="removeAttr">刪除上下文對象中的屬性</a> <br>
    <a href="getRealPath">獲取資源在服務器上的完整路徑</a> <br>
    <h4>文件下載</h4>
    <a href="download?filename=meinv.png">美女的誘惑(下載)</a> <br>
    <a href="download?filename=aa.txt">大數據簡單理解(下載)</a> <br>
    <a id="ww" href="download?filename=大數據簡單理解.txt">大數據簡單理解1(下載)</a> <br>
    <h4>驗證碼</h4>
    <img src="anli5"  alt="" onclick="changeImg(this)"> <br>
</body>
</html>

案例1 : 3秒鐘之后跳轉到黑馬官網(定時刷新)

需求分析:
訪問一個servlet,3秒鐘之后跳轉到黑馬官網(定時刷新)
技術分析:
響應頭: refresh="3;url=http://www.itheima.com"
設置響應頭:
response.setHeader("refresh","3;url=http://www.itheima.com");
package com.itheima.a_anli1;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "RefreshServlet", urlPatterns = "/refresh")
public class RefreshServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 實現定時刷新
        // 設置響應頭信息 refresh
        response.setHeader("refresh","3;url=http://www.itheima.com");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

案例2:使用location響應頭實現跳轉(重定向)

MyServlert

package com.itheima.b_location;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "MyServlet", urlPatterns = "/my")
public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("班長曰: 借我錢!");
        System.out.println("我曰: 借多少啊?");
        System.out.println("班長曰: 自己獲取....");
        System.out.println(request.getParameter("money"));
        System.out.println("我曰: 不好意思,沒有零錢,你去找花花借吧...");
        System.out.println("班長曰: 花花在哪? ");
        //------------------- 重定向
        // 方式1: 了解
        //a.設置響應狀態碼
        //response.setStatus(302);
        //b.設置重定向的路徑      /day04/hua
        //response.setHeader("location",request.getContextPath()+"/hua?money=400");
        //b.方式2:
        response.sendRedirect(request.getContextPath()+"/hua?money=400");
        //response.sendRedirect("http://www.itheima.com/");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

HuaServler

package com.itheima.b_location;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "HuaServlet", urlPatterns = "/hua")
public class HuaServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("班長曰: 花花,借我錢!");
        System.out.println("花花曰: 借多少呀?");
        System.out.println("班長曰: 自己獲取?");
        System.out.println(request.getParameter("money"));
        response.getWriter().print("success....");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

案例3:向瀏覽器輸出中文數據(無亂碼)

package com.itheima.c_anli3;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Anli3Servlet", urlPatterns = "/anli3")
public class Anli3Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 返回一段中文信息
       // response.setHeader("content-type","text/html;charset=utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("你好美女....success");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

案例4:文件下載

    需求分析:
當用戶在瀏覽器上點擊"下載"超鏈接時,向服務器發送一個文件下載的請求
將服務器上的文件保存到本地

技術分析:
瀏覽器: 提供文件下載的超鏈接
<a href="download?filename=meinv.png">美女的誘惑(下載)</a>
<a href="download?filename=aa.txt">java資料(下載)</a>
服務器:
設置兩個頭,一個流
設置 文件的mime類型
response.setContentType(文件的mime類型);
設置 文件下載專用頭 attachment(附件) filename: 文件下載時,保存文件的默認名稱
response.setHeader("content-disposition","attachment;filename="+文件名稱);
獲取文件輸出流
response.getOutputStream();
步驟分析:
前端:
<a href="download?filename=meinv.png">美女的誘惑(下載)</a>
后臺:
//1.獲取被下載的文件的名稱
String filename = request.getParameter("filename");
//2.設置兩個頭
//a.設置 文件的mime類型
// 獲取上下文對象
context = getServletContext();
// 獲取被下載文件的mime類型
String mimeType = context.getMimeType(filename);
response.setContentType(mimeType);
//b.設置 文件下載專用頭 attachment(附件) filename: 文件下載時,保存文件的默認名稱
response.setHeader("content-disposition","attachment;filename="+filename);
//3.獲取文件輸出流
// 讀取文件
// 找到文件在服務器上的完整路徑
String realPath = context.getRealPath("/download/"+filename);
// 獲取文件的輸入流
InputStream is = new FileInputStream(realPath);
// 輸出流
os = response.getOutputStream();
// 流的對拷
package com.itheima.f_download;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

@WebServlet(name = "DownloadServlet", urlPatterns = "/download")
public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 設置request對象的編解碼方式
        request.setCharacterEncoding("utf-8");
        //1.獲取被下載的文件的名稱
        String filename = request.getParameter("filename");

        //2.設置兩個頭
        //a.設置 文件的mime類型
        // 獲取上下文對象
        ServletContext context = getServletContext();
        // 獲取被下載文件的mime類型
        String mimeType = context.getMimeType(filename);
        response.setContentType(mimeType);
        //b.設置 文件下載專用頭  attachment(附件)  filename: 文件下載時,保存文件的默認名稱
        //response.setHeader("content-disposition","attachment;filename="+filename);
        //-------------------- 處理文件下載時,默認名稱(中文亂碼)
        // 文件下載注意事項: 文件下載的默認名稱永遠使用瀏覽器自己的編解碼方式進行解碼
        //String name = "美女.png";
        //name = URLEncoder.encode(name,"utf-8");
        // 使用工具類實現
        String agent = request.getHeader("user-agent");
        String name = DownLoadUtils.getName(agent,filename);

        //---------------------
        response.setHeader("content-disposition","attachment;filename="+name);
        //3.獲取文件輸出流
        // 讀取文件
        // 找到文件在服務器上的完整路徑
        String realPath = context.getRealPath("/download/"+filename);
        // 獲取文件的輸入流
        FileInputStream is = new FileInputStream(realPath);
        // 輸出流
        ServletOutputStream os = response.getOutputStream();
        // 流的對拷
        int len = 0;
        byte b[] = new byte[1024];
        while((len=is.read(b))!=-1){
            os.write(b,0,len);
        }
        // 關流
        os.close();
        is.close();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

工具類


import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import sun.misc.BASE64Encoder;

public class DownLoadUtils {
/**

@param agent : 用戶代理
@param filename : 文件名稱
@return
@throws UnsupportedEncodingException
/
    public static String getName(String agent, String filename) throws UnsupportedEncodingException {
        if (agent.contains("Firefox")) {
            // 火狐瀏覽器
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
            // 其它瀏覽器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}

###         案例5:點擊切換驗證碼

package com.itheima.g_anli5;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "CodeServlet",urlPatterns = "/anli5")
public class CodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // 使用java圖形界面技術繪制一張圖片

    int charNum = 4; // 生成4位的驗證碼
    int width = 20 * 4; // 圖片寬
    int height = 28; // 圖片高

    // 1. 創建一張內存圖片
    BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    // 2.獲得繪圖對象
    Graphics graphics = bufferedImage.getGraphics();

    // 3、繪制背景顏色
    graphics.setColor(Color.YELLOW);
    graphics.fillRect(0, 0, width, height);

    // 4、繪制圖片邊框
    graphics.setColor(Color.GRAY);
    graphics.drawRect(0, 0, width - 1, height - 1);

    // 5、輸出驗證碼內容
    graphics.setColor(Color.RED);
    graphics.setFont(new Font("宋體", Font.BOLD, 22));

    // 隨機輸出4個字符
    String s = "ABCDEFGHGKLMNPQRSTUVWXYZ23456789";
    Random random = new Random();

    // session中要用到
    String msg = "";

    int x = 5;
    for (int i = 0; i < charNum; i++) {
        int index = random.nextInt(32);
        String content = String.valueOf(s.charAt(index));

        msg += content;
        graphics.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
        graphics.drawString(content, x, 22);
        x += 20;
    }

    // 6、繪制干擾線
    graphics.setColor(Color.GRAY);
    for (int i = 0; i < 5; i++) {
        int x1 = random.nextInt(width);
        int x2 = random.nextInt(width);

        int y1 = random.nextInt(height);
        int y2 = random.nextInt(height);
        graphics.drawLine(x1, y1, x2, y2);
    }

    // 釋放資源
    graphics.dispose();

    // 圖片輸出 ImageIO
    ImageIO.write(bufferedImage, "jpg", response.getOutputStream());

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request,response);
}

}

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瓮安县| 米脂县| 博爱县| 安图县| 太白县| 临武县| 东乌珠穆沁旗| 平罗县| 开阳县| 修武县| 元朗区| 华容县| 泸水县| 鄂托克旗| 东乡县| 台山市| 从江县| 镇雄县| 杂多县| 永昌县| 双城市| 昌图县| 五寨县| 广平县| 芮城县| 朝阳区| 和硕县| 阿荣旗| 六盘水市| 马龙县| 攀枝花市| 海口市| 福建省| 吴忠市| 博罗县| 墨江| 河南省| 东光县| 齐河县| 体育| 上饶市|