• Day10 上传和下载


    上传

    将本地文件传输到服务器

    jsp:
        文件上传的请求方式必须是post
        input的type必须是file
        enctype="multipart/form-data"
    
    <form action="upload" method="post" enctype="multipart/form-data">
            <input type="file" name="upload"><br/>
            <input type="submit" value="上传">
    </form>
    
    servlet:
    //1.设置编码
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            //2.读(流)
            InputStream is = request.getInputStream();//从请求中获取流
            //3.写(写到upload的文件夹下)
            //路径:在服务器中位置
            String path = request.getServletContext().getRealPath("/upload");
            OutputStream out = new FileOutputStream(new File(path,"a.txt"));
            
            byte[] buf = new byte[1024];
            int data = -1;
            while((data=is.read(buf)) != -1){
                out.write(buf, 0, data);
            }
            //释放资源
            out.close();
            is.close();
            System.out.println("上传完成");
    
    浏览器标志信息: 
    ------WebKitFormBoundarytd2doI29GpOG23VA
    Content-Disposition: form-data; name="upload"; filename="分包.txt"
    Content-Type: text/plain
    获取请求头信息比较麻烦
    
    上传框架:
      comms-upload.jar   apache
      comms-io.jar
    
    1.    导入jar
    2.    编写jsp表单
    3.    servlet
    //fileItemFactory工厂:配置(缓冲区的大小,临时文件存放目录)
                DiskFileItemFactory factory = new DiskFileItemFactory();
                //临时文件存放目录
                factory.setRepository(new File("c:/"));
                //设置缓冲区大小
                factory.setSizeThreshold(1024*1024);
                
                //解析请求(获取所有的表单元素(普通表单元素/文件表单元素))
                //ServletFileUpload核心:将所有的表单元素解析为Fileitem
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<FileItem> items = upload.parseRequest(request);
                //获取文件目录
                String path = request.getServletContext().getRealPath("/upload");
                //遍历处理
                for (FileItem fileItem : items) {
                    //判断类型
                    if(fileItem.isFormField()){//是否为普通表单元素
                        //获取普通
                        String name = fileItem.getFieldName();//表单元素name值
                        String value = fileItem.getString();//value值
                        System.out.println("name="+name+",value="+value);
                    }else{//文件
                        String name = fileItem.getName();//文件名称
                        fileItem.write(new File(path, name));
                    }
                }
                System.out.println("上传成功");

    下载

    将服务器的文件传输到本地。

    //1.设置编码
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            //2.获取参数的值  download?filename=xxx
            String filename = request.getParameter("filename");
            //3.获取文件的服务器路径(获取目录的路径)
            String path = request.getServletContext().getRealPath("/res");
            //4.读取文件
            InputStream is = new FileInputStream(new File(path,filename));
            //5.通过响应写文件到本地
            //设置响应头
            response.setHeader("Content-Disposition",
                    "attachment;filename="+URLEncoder.encode(filename, "utf-8"));
            OutputStream out = response.getOutputStream();
            byte[] buf = new byte[1024];
            int data = -1;
            while((data=is.read(buf)) != -1){
                out.write(buf, 0, data);
            }
            out.close();
            is.close();

    过滤器(Filter)

    过滤请求和响应。

    当用户发出请求时,首先到达过滤器,过滤器如果”放行”,此时该请求就可以到达下一个过滤器或者servlet。当客户端响应时,也需要经过过滤器。

    //初始化
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            
        }
    
        //过滤请求和响应
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            System.out.println("filter 接收到请求");
            //放行
            chain.doFilter(request, response);
            
            System.out.println("filter 接收到响应");
        }
    
        //销毁
        @Override
        public void destroy() {
            
        }
    
    
    <filter>
          <filter-name>myfilter</filter-name>
          <filter-class>filter.MyFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>myfilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
    
    filter应用场景:
    1)    全局的编码设置
    2)    敏感字过滤
    3)    权限管理

    监听器(listener)

    监听域的对象创建销毁。

    HttpRequestListener

    HttpSessionListener

    ServletContextListener

    监听域中数据的变化(添加,修改,删除)

    ServletContextAttributeListener:监听application域中数据变化
    ServletRequestAttributeListener:监听request域中数据的变化
    HttpSessionActivationListener:监听session的状态(活化和钝化)
    HttpSessionAttributeListener:监听session域中数据变化
    HttpSessionBindingListener:实现session和对象的绑定

    Ajax

      同步请求:第二次请求需要等到第一次请求获取到响应之后才可以发送。

      异步请求:请求之间没有依赖关系。

      异步 JavaScript XMLAsynchronous JavaScript And XML)。

    模拟百度查询:
      原生js:
    var val = document.getElementById("content").value;
            var oDiv = document.getElementById("div1");
            //借助于Ajax
            //1.创建xhr对象
            var xhr = new XMLHttpRequest();
            //2.打开连接
            xhr.open("GET","test?key="+val);   //请求方式   请求路径   是否异步
            //3.发送请求     请求体
            xhr.send(null);
            //4.监听状态并且接收响应
            xhr.onreadystatechange = function(){
                //获取请求状态   0-4                 请求正确时获取
                if(xhr.readyState == 4 && xhr.status == 200){
                    oDiv.innerHTML = xhr.responseText;
                }
            }
    
       jQuery的Ajax:
          $.ajax({
                url:"test",
                type:"get",
                data:"key="+$("#content").val(),
                dataType:"text",
                success:function(data){
                    $("#div1").html(data);
                }
            });
    url:请求路径
    type:请求方式   get/post
    data:传输的数据  字符串或者json  {“key”:$(“#content”).val()}
    dataType:服务器响应数据类型   (xml/html/json/script/text)
    success:服务器响应正确时返回
  • 相关阅读:
    品优购项目(web)
    Linux
    web前端面试题
    三级网络
    Vue报错:TypeError: Cannot create property ‘xxx‘ on string ‘xxxx
    vue 动态添加页面背景色
    vue 打开新页面 页面滚动到顶部
    ios 系统 h5 页面不发送请求
    小程序返回上一页
    小程序动态设置页面背景色、
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8394722.html
Copyright © 2020-2023  润新知