转发,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);//将上传的文件写入我们自己的文件

  }

posted on 2018-05-14 20:21  北冥丶中郎将  阅读(1001)  评论(0编辑  收藏  举报