zoukankan      html  css  js  c++  java
  • Javaweb基础案例

    目录

    各个文件所在目录

    通过HTTPServlet获取

    ServletContext context = this.getServletContext();
    

    获取文件的服务器路径

    web目录下的资源访问

    String realPath = context.getRealPath("/b.txt");
    System.out.println(realPath);
    

    web-INF目录下的资源访问

    String a = Context.getRealPath("/web-INF/a.txt");
    

    src目录下的资源访问

    String a1 = context.getRealPath("/WEB-INF/classes/a.txt");
    

    文件下载

    1. 页面显示下载链接
    2. 将对应的文件转换为字节流(Servlet)
      1. 获取请求参数,文件名称
      2. 找到文件服务器路径并使用字节流关联
    3. 设置response响应头
      1. 设置响应头类型 content-type (获取文件的mime类型)
      2. 设置响应头-打开方式 content-disposition; attachment:附件 文件名称:filename
    4. 解决中文文件名问题
      1. 获取user-agent请求头
      2. 使用工具类方法编码文件名即可
    5. 将输入的数据写出到输出流中
      1. 字节数组作为缓冲区
    <!-- 获取图片的链接 并将文件的地址传入 下面的Servlet中-->
    <a href="/day15_response_war_exploded/downloadServlet?filename=数据库.jpg">图片</a>
    <a href="/day15_response_war_exploded/downloadServlet?filename=1.3gp">视频</a>
    
    /**            文件下载(显示文件下载提示)
      *      1.获取请求参数,文件名称
      *      2.使用字节码输入流加载文件进内存
      *      3.设置response的响应头(3.1设置响应头类型 content-type和3.2设置响应头打开方式 content-disposition;      attachment:附件    文件名称:filename
      		 4.解决中文文件名乱码问题(使用工具类))
      *      5.将输入流的数据写出到输出流中
     **/
    @WebServlet("/downloadServlet")
    public class DownloadServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request,response);
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.获取请求参数,文件名称
            String filename = request.getParameter("filename");
            //2.使用字节码输入流加载文件进内存
                //2.1找到文件服务器路径
            ServletContext servletContext = this.getServletContext();
            String realPath = servletContext.getRealPath("/img/" + filename);
            	//2.2用字节流关联
            FileInputStream fis = new FileInputStream(realPath);
    // 至此已获得字节流文件   fis  
            
            //3.设置response的响应头    将文件以什么形式下载
           	 	//3.1设置响应头类型 content-type
                //获取文件的mime类型
            String mimeType = servletContext.getMimeType(filename);
            response.setHeader("content-type",mimeType);
            	//3.2设置响应头打开方式 content-disposition;      attachment:附件  文件名称:filename
    
            //4.解决中文文件名问题
                //1.获取user-agent请求头  包含浏览器信息
            String agent = request.getHeader("user-agent");
            //2.使用工具类方法编码文件名即可
            filename = DownLoadUtils.getFileName(agent,filename);
            response.setHeader("content-disposition","attachment;filename="+filename);
    
            //5.将输入流的数据写出到输出流中
            ServletOutputStream sos = response.getOutputStream();
                //字节数组作为缓冲区
            byte[] buffer = new byte[1024 * 8];
            int len = 0;
            while ((len = fis.read(buffer)) != -1){
                sos.write(buffer,0,len);
            }
    
            fis.close();
    
        }
    }
    
    					//工具类
    //解决下载文档中文乱码的问题
    // 主要是获取浏览器的名称,选择合适的编码方式
    public class DownLoadUtils {
        public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
            if (agent.contains("MSIE")) {
                // IE浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+", " ");
            } else 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;
        }
    }
    

    验证码生成

    设置时间戳 :

    <script>
        /*              《验证码》
        * 分析:
        *       点击超链接或者图片,需要换一张
        *       1.给超链接和图片绑定单机事件
        *       2.重定向设置图片的src属性
        * */
        window.onload = function() {
            //1.获取对象图片
            var img= document.getElementById("checkCode");
            //2.绑定单机事件
            img.onclick = function() {
                //加时间戳
                var date = new Date().getTime();
                img.src = "/day15_response_war_exploded/checkCodeServlet?"+ date;
            }
        }
    </script>
    
    	<img id="checkCode" src="/day15_response_war_exploded/checkCodeServlet" />
        <a id="change" href="">看不清,换一张?</a>
    

    创建验证码图片对象,设置背景颜色、画笔、画边框、获取随机字符、写验证码、画干扰线,将图片显示

    在这里插入图片描述

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int width = 100;
        int height = 50;
        //1.创建一对象,在内存中图片(验证码图片对象)
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
       
        //2.美化图片
        //2.1填充背景颜色
        //画笔对象
        Graphics g = image.getGraphics();
        //设置画笔颜色
        g.setColor(Color.pink);
        //背景色
        g.fillRect(0,0,width, height);
    
        //2.2画边框  --> 四边形
        g.setColor(Color.blue);
        g.drawRect(0,0,width-1, height-1);
    
        //2.3写验证码
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456879";
        //生成随机角标
        Random random = new Random();
    
        for (int i = 1; i <=4; i++) {
            int index = random.nextInt(str.length());
            //获取随机字符
            char c = str.charAt(index);
            //2.3写验证码
            g.drawString(c+"",width/5*i,height /2);
        }
        //2.4画干扰线
        g.setColor(Color.yellow);
        //随机生成坐标点
        for (int i = 1; i <= 10; i++) {
            int x1= random.nextInt(width);
            int x2 = random.nextInt(width);
    
            int y1 = random.nextInt(height);
            int y2 = random.nextInt(height);
    
            g.drawLine(x1,y1,x2,y2);
        }
    
        //3.将图片显示到页面上
        ImageIO.write(image,"jpg",response.getOutputStream());
    
    }
  • 相关阅读:
    Discuz热搜在哪里设置?
    Discuz如何设置帖子隐藏回复可见或部分可见方法
    新版Discuz!应用中心接入教程(转)
    Diszuz管理面版被锁怎么办?
    vs 2019 调试无法查看变量
    Google Docs 的格式刷快捷键
    chrome 的常用快捷键
    Activiti 数据库表结构
    activiti 报 next dbid
    尚硅谷Java基础_Day2
  • 原文地址:https://www.cnblogs.com/lihaijia/p/14406440.html
Copyright © 2011-2022 走看看