• 2018-09-05Servlet打开或者下载文件+生成验证码小程序+Request初步练习


    Servlet练习:

    访问PictrueServlet跳转一张图片:

    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初级练习:

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

    多练习!一定会成功秃顶的!加油!!!

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

           }

    }

  • 相关阅读:
    C# HTTP系列9 GET与POST示例
    [译]Android Studio 3.6 新特性概览
    mysql error 1290 hy000:The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen' 解决方案
    mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
    Windows+Apache2.4.10+PHP7.0+MySQL5.6.21安装
    php版本的选择
    PHP,Mysql根据经纬度计算距离并排序
    windows无法启动MySQL服务 错误1067
    PHP MYSQL 搜索周边坐标,并计算两个点之间的距离
    html5获取用户当前的地理位置,即经纬度。
  • 原文地址:https://www.cnblogs.com/postgredingdangniu/p/9592846.html
Copyright © 2020-2023  润新知