zoukankan      html  css  js  c++  java
  • java_day24_转发,request方法,post,上传文件

    转发,request方法,post,上传文件

    一.post请求与get请求

      post和get请求的区别

      1.都是http协议规定的请求方式之一,get请求更偏向于从服务器获取数据,而不会修改服务器中已有的数据,post请求更偏向于向服务器发送数据

      2.get请求,请求参数拼接在URL后,post请求,请求参数放在请求体中,但是无论哪种方式参数的格式和内容都是一样的,每一个参数使用key=value的形式,多个参数之间使用&进行连接

      3.由于get请求的参数是放在URL上的,有因为URL是有长度限制的,所以get请求不能发送过大的数据,而post请求,由于是参数放入请求体,就没有长度的限制了,可以用来上传文件

      4.关于安全,get和post一样都是不安全的,因为http协议本身就是不安全的协议

      5.代码:用户注册

        Map<String,String[]> map = request.getParameterMap();//将所有参数放到map中

        Set<String>  keySet = map.keySet();//获取所有key,得到一个set集合

        for(String key : keySet){  //增强for循环遍历数据

          String[] values = map.get(key);//通过key的值取出value的值,数组表示

          writer.println(key + Arrays.toString(values));输出key和value,value数组转为字符串   

        }

    二.转发

      请求转发和请求重定向的区别

      1.请求转发是一次请求一次响应,而请求重定向是多次请求多次响应

      2.请求转发地址栏不变,而重定向后会显示一个新的请求地址

      3.请求转发,只能转发到本项目的其他servlet,而重定向没有限制,本项目的也行,其他项目也行

      4.请求转发是服务器行为,只需要给出转发的servlet路径,而重定向是浏览器行为

      5.请求转发效率高

      6.核心代码:请求转发

        RequestDispatcher rd = request.getRequestDispatcher("/path");//请求转发的URL

        rd.forward(request,response);//执行转发

    三.上传文件

      1.html代码

      //上传文件必须有enctyp="multipart/form-data", method="post"

      <form action="/upload" method="post" enctype="multipart/form-data"> 

      <input type="file" name="uploadFile">//

      <input type="submit">

      <form>

      2.java代码

      request.setCharacterEncoding("utf-8");

      response.setContentType("text/html;chaset=utf-8");

      FileItemFactory factory = new DiskFileItemFactory();//创建ServletFileUpload对象来上传文件

      ServletFileUpload upload = new ServletFileUpload(factory);

      upload.setFileSizeMax(1024*1024*30);//服务器支持的最大文件(请求体)

      upload.setSizeMax(1024*1024*40);//服务器支持整个表单的最大文件

      upload.setHeaderEncoding("utf-8");//支持中文

      String path = getServletContext().getRealPath("")+File.separator+"upload";//web文件夹的路径

      File uploadDir = new File(path);//

      if(!uploadDir.exists()){

        uploadDir.mkdirs();//创建文件夹

      }  

      List<FileItem> fileItems = upload.parseRequest(request);//解析Request放入List集合中

      if(FileItem fileItem : fileItems){

        if(fileItem.isFormField()){  //判断是否为非file表单数据

          continue;}

        String fileName =fileItem.getName();//获取原文件名

        String filePath = path + File.separator + fileName();//获取文件路径

        File file = new File(filePath);//创建file对象(空壳)

        fileItem.write(file);//将上传的文件写入我们自己的文件

      }

  • 相关阅读:
    JDK9对集合添加的优化
    IO异常的处理
    动态创建分页 LINQ+EF
    TypeError at /admin/booktest/book_infor/add/ __str__ returned non-string (type bytes)
    TypeError at /admin/booktest/bookinfo/ expected string or buffer
    linux下的 pycharm 2016.3d的注册码
    解决ubantu下的pycharm输入中文的问题
    .pip的时候出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))…………
    Day06
    Day05
  • 原文地址:https://www.cnblogs.com/memo-song/p/9037935.html
Copyright © 2011-2022 走看看