JavaWeb:EL、JSTL和Cookie
文件的上传
- 要有一个form标签,method=post
- form的encType属性必须是multipart/form-data
- 在form中使用input type=file添加上传的文件
- 编写服务器代码接受上传的文件。
-
首先判断上传的数据是不是多段数据
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. 获取要下载的文件名
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之后,每次请求都会发送给服务器
-
每个Cookie的大小不能超过4kb
-
Cookie的创建
Cookie cookie = new Cookie("key1","value1");
//通过响应头Set-Cookie通知客户端保存Cookie
response.addCookie(cookie);
//浏览器发现有set-cookie之后就去看一看有没有这个Cookie,有就更新,没有就创建。
- 服务器获取Cookie
Cookie[] cookies=request.getCookies();
-
修改Cookie的值
- 创建一个同名的cookie
- 在构造器中赋予cookie新的值
- 调用response.addCookie方法
-
Cookie的生命周期
cookie.setMaxAge(num);
//num表示cookie存在的秒数
//默认情况下为-1,表示会话级,在浏览器关闭时清除。
//0表示马上删除。
使用Cookie可以做到免用户名登录