2018-09-05Servlet打開或者下載文件+生成驗證碼小程序+Request初步練習

Servlet練習:java

 

訪問PictrueServlet跳轉一張圖片:web

package com.oracle.demo01;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PictrueServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //客戶端顯示圖片是一個文件複製的過程!
        //明確數據源:
        ServletContext servletContext=this.getServletContext();
        String Path=servletContext.getRealPath("WhatTheFuck.jpg");
        FileInputStream fis=new FileInputStream(Path);
        //明確目的地:
        ServletOutputStream sos=response.getOutputStream();
        //複製文件:
        int len=0;
        byte[] bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1){
            sos.write(bytes,0,len);
        }
        fis.close();
    }

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

重要練習Servlet練習:瀏覽器

package com.oracle.demo02;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sun.misc.BASE64Encoder;
public class DownLoadServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //建立ServletContext域對象:
        ServletContext ServletContext=this.getServletContext();
        //獲取Web.xml傳過來的filename對象(封裝在request對象中,用getParameter方法調用);
        String filename=request.getParameter("filename");
        
        //解決txt文件是中文名稱問題,加入這句話你好.txt文件能夠下載了,可是沒有名稱,因此加入一下的話:
        filename=new String(filename.getBytes("ISO8859-1"),"UTF-8");
        
        
        
        //瀏覽器兼容性調教:
        //首先拿到用戶瀏覽器型號:
        String agent=request.getHeader("User-Agent");
        String filenameEncoder="";
        if (agent.contains("MSIE")) {
                // IE瀏覽器
                filenameEncoder = URLEncoder.encode(filename, "utf-8");
                filenameEncoder = filenameEncoder.replace("+", " ");
        } else if (agent.contains("Firefox")) {
                // 火狐瀏覽器
        BASE64Encoder base64Encoder = new BASE64Encoder();
                filenameEncoder= "=?utf-8?B?"
                        + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
                // 其它瀏覽器
                filenameEncoder= URLEncoder.encode(filename, "utf-8");                
        }
        
        //一下兩句話告知瀏覽器客戶端區分文件類型,不然.zip和.wmv文件會下載成「文件」!
        response.setContentType(getServletContext().getMimeType(filename));
        //告知客戶端文件的打開方式(下載)
        response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder);
                
        //獲取文件絕對路徑:
        String Path=ServletContext.getRealPath("DownLoad/"+filename);
        //明確數據源:
        FileInputStream fis=new FileInputStream(Path);
        //明確目的地:
        ServletOutputStream sos=response.getOutputStream();
        //複製文件:
        int len=0;
        byte[] bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1){
            sos.write(bytes,0,len);
        }
        //關流:
        fis.close();
    }

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

生成驗證碼示例代碼:緩存

package com.oracle.demo03;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 驗證碼生成程序
 * 複製進來的不是本身建立的,因此要先寫web.xml信息
 */
public class CheckImgServlet extends HttpServlet {

    // 集合中保存全部成語
    private List<String> words = new ArrayList<String>();

    @Override
    public void init() throws ServletException {
        // 初始化階段,讀取new_words.txt
        // web工程中讀取 文件,必須使用絕對磁盤路徑
        String path = getServletContext().getRealPath("/WEB-INF/new_words.txt");
        try {
            BufferedReader reader = new BufferedReader(new FileReader(path));
            String line;
            while ((line = reader.readLine()) != null) {
                words.add(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 禁止緩存
        // response.setHeader("Cache-Control", "no-cache");
        // response.setHeader("Pragma", "no-cache");
        // response.setDateHeader("Expires", -1);

        int width = 120;
        int height = 30;

        // 步驟一 繪製一張內存中圖片
        BufferedImage bufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);

        // 步驟二 圖片繪製背景顏色 ---經過繪圖對象
        Graphics graphics = bufferedImage.getGraphics();// 獲得畫圖對象 --- 畫筆
        // 繪製任何圖形以前 都必須指定一個顏色
        graphics.setColor(getRandColor(200, 250));
        graphics.fillRect(0, 0, width, height);

        // 步驟三 繪製邊框
        graphics.setColor(Color.WHITE);
        graphics.drawRect(0, 0, width - 1, height - 1);

        // 步驟四 四個隨機數字
        Graphics2D graphics2d = (Graphics2D) graphics;
        // 設置輸出字體
        graphics2d.setFont(new Font("宋體", Font.BOLD, 18));

        Random random = new Random();// 生成隨機數
        int index = random.nextInt(words.size());
        String word = words.get(index);// 得到成語

        // 定義x座標
        int x = 10;
        for (int i = 0; i < word.length(); i++) {
            // 隨機顏色
            graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
                    .nextInt(110), 20 + random.nextInt(110)));
            // 旋轉 -30 --- 30度
            int jiaodu = random.nextInt(60) - 30;
            // 換算弧度
            double theta = jiaodu * Math.PI / 180;

            // 得到字母數字
            char c = word.charAt(i);

            // 將c 輸出到圖片
            graphics2d.rotate(theta, x, 20);
            graphics2d.drawString(String.valueOf(c), x, 20);
            graphics2d.rotate(-theta, x, 20);
            x += 30;
        }

        // 將驗證碼內容保存session
        request.getSession().setAttribute("checkcode_session", word);

        // 步驟五 繪製干擾線
        graphics.setColor(getRandColor(160, 200));
        int x1;
        int x2;
        int y1;
        int y2;
        for (int i = 0; i < 30; i++) {
            x1 = random.nextInt(width);
            x2 = random.nextInt(12);
            y1 = random.nextInt(height);
            y2 = random.nextInt(12);
            graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
        }

        // 將上面圖片輸出到瀏覽器 ImageIO
        graphics.dispose();// 釋放資源
        
        //將圖片寫到response.getOutputStream()中
        ImageIO.write(bufferedImage, "jpg", response.getOutputStream());

    }

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

    /**
     * 取其某一範圍的color
     * 
     * @param fc
     *            int 範圍參數1
     * @param bc
     *            int 範圍參數2
     * @return Color
     */
    private Color getRandColor(int fc, int bc) {
        // 取其隨機顏色
        Random random = new Random();
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }
}

Request初級練習:session

package com.oracle.demo04;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LineServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取請求方式:
        String method=request.getMethod();
        System.out.println("method"+method);
        //獲取請求資源的相關內容:
        String requestURI=request.getRequestURI();
        System.out.println("requestURI:"+requestURI);
        StringBuffer requestURL=request.getRequestURL();
        System.out.println("requestURL:"+requestURL);
        String ContextPath=request.getContextPath();
        System.out.println("ContextPath:"+ContextPath);
        //獲取get方式提交URL後的參數信息:
        String queryString=request.getQueryString();
        System.out.println("queryString:"+queryString);
        //獲取客戶端的訪問者的IP地址:
        String ip=request.getRemoteAddr();
        System.out.println("ip:"+ip);
    }

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

多練習!必定會成功禿頂的!加油!!!oracle

package com.oracle.demo03;dom

import java.awt.Color;ide

import java.awt.Font;字體

import java.awt.Graphics;this

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

 * 驗證碼生成程序

 * 複製進來的不是本身建立的,因此要先寫web.xml信息

 */

public class CheckImgServlet extends HttpServlet {

 

       // 集合中保存全部成語

       private List<String> words = new ArrayList<String>();

 

       @Override

       public void init() throws ServletException {

              // 初始化階段,讀取new_words.txt

              // web工程中讀取 文件,必須使用絕對磁盤路徑

              String path = getServletContext().getRealPath("/WEB-INF/new_words.txt");

              try {

                     BufferedReader reader = new BufferedReader(new FileReader(path));

                     String line;

                     while ((line = reader.readLine()) != null) {

                            words.add(line);

                     }

                     reader.close();

              } catch (IOException e) {

                     e.printStackTrace();

              }

       }

 

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              // 禁止緩存

              // response.setHeader("Cache-Control", "no-cache");

              // response.setHeader("Pragma", "no-cache");

              // response.setDateHeader("Expires", -1);

 

              int width = 120;

              int height = 30;

 

              // 步驟一 繪製一張內存中圖片

              BufferedImage bufferedImage = new BufferedImage(width, height,

                            BufferedImage.TYPE_INT_RGB);

 

              // 步驟二 圖片繪製背景顏色 ---經過繪圖對象

              Graphics graphics = bufferedImage.getGraphics();// 獲得畫圖對象 --- 畫筆

              // 繪製任何圖形以前 都必須指定一個顏色

              graphics.setColor(getRandColor(200, 250));

              graphics.fillRect(0, 0, width, height);

 

              // 步驟三 繪製邊框

              graphics.setColor(Color.WHITE);

              graphics.drawRect(0, 0, width - 1, height - 1);

 

              // 步驟四 四個隨機數字

              Graphics2D graphics2d = (Graphics2D) graphics;

              // 設置輸出字體

              graphics2d.setFont(new Font("宋體", Font.BOLD, 18));

 

              Random random = new Random();// 生成隨機數

              int index = random.nextInt(words.size());

              String word = words.get(index);// 得到成語

 

              // 定義x座標

              int x = 10;

              for (int i = 0; i < word.length(); i++) {

                     // 隨機顏色

                     graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random

                                   .nextInt(110), 20 + random.nextInt(110)));

                     // 旋轉 -30 --- 30

                     int jiaodu = random.nextInt(60) - 30;

                     // 換算弧度

                     double theta = jiaodu * Math.PI / 180;

 

                     // 得到字母數字

                     char c = word.charAt(i);

 

                     // c 輸出到圖片

                     graphics2d.rotate(theta, x, 20);

                     graphics2d.drawString(String.valueOf(c), x, 20);

                     graphics2d.rotate(-theta, x, 20);

                     x += 30;

              }

 

              // 將驗證碼內容保存session

              request.getSession().setAttribute("checkcode_session", word);

 

              // 步驟五 繪製干擾線

              graphics.setColor(getRandColor(160, 200));

              int x1;

              int x2;

              int y1;

              int y2;

              for (int i = 0; i < 30; i++) {

                     x1 = random.nextInt(width);

                     x2 = random.nextInt(12);

                     y1 = random.nextInt(height);

                     y2 = random.nextInt(12);

                     graphics.drawLine(x1, y1, x1 + x2, x2 + y2);

              }

 

              // 將上面圖片輸出到瀏覽器 ImageIO

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

             

              //將圖片寫到response.getOutputStream()

              ImageIO.write(bufferedImage, "jpg", response.getOutputStream());

 

       }

 

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }

 

       /**

        * 取其某一範圍的color

        *

        * @param fc

        *            int 範圍參數1

        * @param bc

        *            int 範圍參數2

        * @return Color

        */

       private Color getRandColor(int fc, int bc) {

              // 取其隨機顏色

              Random random = new Random();

              if (fc > 255) {

                     fc = 255;

              }

              if (bc > 255) {

                     bc = 255;

              }

              int r = fc + random.nextInt(bc - fc);

              int g = fc + random.nextInt(bc - fc);

              int b = fc + random.nextInt(bc - fc);

              return new Color(r, g, b);

       }

}

相關文章
相關標籤/搜索