JavaWeb:EL、JSTL和Cookie

文件的上传

  1. 要有一个form标签,method=post
  2. form的encType属性必须是multipart/form-data
  3. 在form中使用input type=file添加上传的文件
  4. 编写服务器代码接受上传的文件。
  • 首先判断上传的数据是不是多段数据

    if(ServletFileUpload.isMultipartContent(request)){
           //创建fileItemFactory工厂实现类
           FileItemFactory fileItemFactory = new DiskFileItemFactory();
           //创建用于解析上传数据的工具类ServletFileUpload
           ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
           //调用创建用于解析上传数据的工具类ServletFileUpload的解析方法
           List<FileItem> list = servletFileUpload.parseRequest(request);
           //循环判断每一个表单项是普通类型还是上传的文件
           for (FileItem fileItem:list) {
               if(fileItem.isFormField()){
               //如果是true就是普通表单项
               System.out.println(fileItem.getFieldName());
               System.out.println(fileItem.getString("UTF-8"));
               }else{
                //如果是false则是上传的文件
                System.out.println(fileItem.getFieldName());
                System.out.println(fileItem.getName());
                //准备写出上传的文件
                fileItem.write(new File("e:\\"+fileItem.getName()));
                }
           }
    }
    

文件的下载

  1. 获取要下载的文件名
  2. 读取要下载的文件内容
  3. 把下载的内容回传给客户端
  4. 在回传前,通过想用头告诉客户端返回的数据类型
  5. 还要告诉客户端受到的数据是用于下载使用
//1. 获取要下载的文件名
	String downLoadFileName = "timg.jpg";
//2. 读取要下载的文件内容
	ServletContext servletContext = getServletContext();
//获取要下载文件的类型
	String mimeType = servletContext.getMimeType("/file/"+ downLoadFileName);
	System.out.println("下载文件的类型"+mimeType);
//4. 在回传前,通过想用头告诉客户端返回的数据类型
	response.setContentType(mimeType);
//5. 还要告诉客户端受到的数据是用于下载使用
	response.setHeader("Content-Disposition","attachment;filename=xx");
//URL编码
URLEncoder.encode("中国","UTF-8");
	InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downLoadFileName);
//获取响应的输出流
	OutputStream outputStream = response.getOutputStream();
//3. 把下载的内容回传给客户端
//获取流中的全部数据,并复制给输出流
 	IOUtils.copy(resourceAsStream,outputStream);

Base64编码和解码

		String content ="中国";
        //创建一个Base64编码器
        BASE64Encoder base64Encoder = new BASE64Encoder();
        //创建Base64编码操作
        String encode = base64Encoder.encode(content.getBytes("UTF-8"));
        System.out.println(encode);
        //创建一个Base64解码器
        BASE64Decoder base64Decoder = new BASE64Decoder();
        //解码操作
        byte[] bytes = base64Decoder.decodeBuffer(encode);
        System.out.println(new String(bytes,"UTF-8"));
  • cookie是度武器通知客户端保存键值对的一种技术

  • 客户端有了Cookie之后,每次请求都会发送给服务器

  • 每个Cookie的大小不能超过4kb

  • Cookie的创建

Cookie cookie = new Cookie("key1","value1");
//通过响应头Set-Cookie通知客户端保存Cookie
response.addCookie(cookie);
//浏览器发现有set-cookie之后就去看一看有没有这个Cookie,有就更新,没有就创建。
  • 服务器获取Cookie
Cookie[] cookies=request.getCookies();
  • 修改Cookie的值

    1. 创建一个同名的cookie
    2. 在构造器中赋予cookie新的值
    3. 调用response.addCookie方法
  • Cookie的生命周期

cookie.setMaxAge(num);
//num表示cookie存在的秒数
//默认情况下为-1,表示会话级,在浏览器关闭时清除。
//0表示马上删除。

使用Cookie可以做到免用户名登录

posted @ 2022-01-05 20:18  Boerk  阅读(24)  评论(0)    收藏  举报