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);

       }

}

相关文章
相关标签/搜索