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:服务器响应正确时返回

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/11154.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论