1. 程式人生 > >驗證碼、jsp動作、檔案上傳和下載

驗證碼、jsp動作、檔案上傳和下載

1.圖片驗證碼的實現

        2行

註冊、下單、支付

目的: 1) 驗證操作者是否是人 2) 防止表單重複提交 生成驗證碼的要點: 1) 使用java程式碼生成圖片物件 BufferedImage 2) 使用Random生成隨機字串 3) 將圖片物件用 ImageIO.write(圖片物件, "jpeg|png", 響應位元組輸出流) 返回給客戶端瀏覽器 驗證驗證碼:要點: 1) 將驗證碼文字存入session作用域 2) 表單提交時,對比session中的驗證碼和表單中的驗證碼

2. 簡訊驗證碼

呼叫第三方的簡訊服務 阿里雲的簡訊服務使用方法:https://www.aliyun.com/

 官方網站 產品和服務=> 雲通訊=> 簡訊服務

  1. 充值
  2. 下載簡訊的sdk (軟體開發包)
  3. 生成開發者的id 和 secret 管理控制檯=>使用者資訊管理=>建立AccessKEY
  4. 設定簡訊模板和簡訊簽名 簡訊服務=>國內訊息 簡訊簽名:傳送者是誰 簡訊模板:規定了簡訊的內容

3. 動態include和靜態include

靜態include <%@ include file="目標檔案" %> 1.jsp+2.jsp 合併在一起 => 一個servlet

動態include <jsp:include page="目標檔案" /> 1.jsp 生成servlet1, 2.jsp 生成servlet2 把servlet1生成的結果和servlet2的結果合併在一起

另外注意page和file的區別 file後只能是jsp(實際存在的檔案) page除了可以是一個jsp以外,還可以是一個servlet的地址

4. jsp動作

    java    15行

<!-- 等價於 request.setAttribute("stu", new Student()); -->
<jsp:useBean id="stu" class="entity.Student" scope="request"/>

<!-- stu.setName("張三"); -->
<jsp:setProperty name="stu" property="name" value="張三"/>

<!-- stu.getName(); -->
<jsp:getProperty name="stu" property="name"/>

<!-- 動態include -->
<%--<jsp:include page="2.jsp"/>--%>

<!-- 轉發 -->
<%--<jsp:forward page="1.jsp"/>--%>   

4. 檔案上傳

注意: 1) method必須是post 2) 必須採用複雜的格式,不能是name=value的引數格式, 必須是multipart/form-data的格式

apache提供了 commons-fileupload.jar 專門用來解析multipart/form-data的格式 commons-io.jar

// 通過程式建立目錄 new File("e:\images").mkdirs()

5.檔案下載

    // 2) 如果要把圖片進行下載操作
    resp.setContentType("application/octet-stream");
    resp.addHeader("content-disposition","attachment;filename=1.jpg");


    // 把【瀏覽器的路徑】 轉換為 【伺服器的磁碟路徑】
    String uri = req.getRequestURI(); // 獲取瀏覽器實際輸入路徑
    System.out.println(uri);
    String path = "e:\\" + uri;// 圖片的磁碟路徑
    // 如果檔案不存在,返回404
    if( !new File(path).exists() ) {
        resp.sendError(404);
        return ;
    }
    // 如果存在,從檔案輸入流讀取,向響應的輸出流寫
    FileInputStream is = new FileInputStream(path);
    OutputStream os = resp.getOutputStream();
    IOUtils.copy(is, os);
    IOUtils.closeQuietly(is);
}

}