Servlet常用对象/文件上传和下载

Cookie

Cookie
浏览器的一种技术
通过服务器程序将一些只需要保存在客户端或者在客户端进行处理的数据,放在本地计算机上,不需要通过网络传输
cookie的大小在4K左右,每一个浏览器可存储的数量不同.cookie不跨浏览器,换电脑也无效
(其实就是一种浏览器的缓存技术,可以缓存类似于书签一样的东西,下次使用时将会去缓存区查找是否存在,而不用时时刻刻都去服务器去获取)
优缺点:
优:提高网页的访问效率,减轻服务器负载
缺:安全性差,通过审查页面的元素属性可以调取
一般cookie的步骤:
1.创建cookie
Cookie cookie = new Cookie(“cookie名称”,“cookie的值”);注:不支持中文,键值都是字符串
2.发送cookie
response.addCookie(cookie对象);
3.获取cookie
request.getCookies();返回的是所有cookie的数组
4.cookie到期时间设置
注:cookie是 浏览器的技术,所以关闭服务器并不会影响到cookie的保存时间
到期时间指的是该cookie何时失效,一般默认关闭浏览器就失效了
手动设定 cookie的有效时间方法:

setMaxAge(int time);方法设定cookie的最大有效时间,以秒来计

通过setMaxAge(int time);方法设置时间需要注意的几个点
1.设置的该数大于0时,表示具体存储的时间
2.设置的数为负数则表示不存储
3.设置的数为0,表示删除该cookie

	负整数:cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。
	正整数:表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。
	零:cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。

HttpSession对象

1.session作用
标识一次会话,该会话有别于一次性的会话,具有一定的时效性,在指定的时间内可以有连续的请求,期间共享数据
通过req.getSession();方法来获取session对象
2.JSESSIONID
SessionId,是标识一次会话的唯一标志
每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的 cookie;
如果JSESSIONID不存在,则服务器会新建session对象,并重新标识;
如果JSESSIONID存在,服务器会将客户端回传过来的ID去服务器中查找与之对应的 session对象
如果没找到,则服务器会新建session对象,并重新标识;
如果找到,则获取 session对象,响应给客户端;
3、Session域对象
通过 setAttribute(name,value);方法向域对象中添加数据,
通过 getAttribute(name) 从域对象中获取数据,
通过 removeAttribute(name)从域对象中移除数据。
4、Session的失效
1、达到最大不活动时间
Tomcat中默认最大不活动时间为30分钟。
可以自行修改默认不活动时间,但不建议。在web.xml文件中

<session-config>
        		<session-timeout>30</session-timeout>
    		</session-config>

2、自己设定过期时间
通过 session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。
通过 getMaxInactiveInterval();方法来查看当前 Session 对象的最大不活动时间。
3、立即失效
手动销毁session对象 session.invalidate();
4、关闭浏览器
session的底层依赖于cookie,默认关闭浏览器失效。
5、关闭服务器
非正常关闭服务器时才会失效。
如果是正常关闭服务器,session会被钝化到本地磁盘,下次访问时会从本地磁盘中活化出来。

ServletContext

存在于web项目中.每一个web项目都会有且仅有一个.
用处:
1.作为域对象,共享数据,对整个应用中都有效
2.获取有关于这个web项目的相关信息
获取这个web项目所在的服务器版本,方法:getServerInfo()
获取这个项目存在于其所在的服务器的真实路径,方法:getRealPath();
1、获取ServletContext对象
1>通过request对象获取
request.getServletContext();
2> 通过session获取
request.getSession().getServletContext();
3> 通过getServletConfig()方法获取
getServletConfig().getServletContext();
4> 直接获取
getServletContext();
2、application域对象
通过 setAttribute(name,value);方法向域对象中添加数据,
通过 getAttribute(name) 从域对象中获取数据,
通过 removeAttribute(name)从域对象中移除数据。
3、常用方法
获取服务器版本 getServerInfo()
获取当前项目在服务器中真实路径 getRealPath()

文件的上传与下载

1.前台
表单实现上传
1.表单提交的类型是 method=“POST”;
2.表单类型设置为enctype=“multpart/form-data”
3.表单元素设置name属性值
2.后台
先导jar包"http://commons.apache.org/"
下载commone-io和commone-fileupload两个jar的资源,并解压导入项目中
commons-fileupload.jar是文件上传的核心包
commons-io.jar是 filefupload的依赖包,也是一个工具包
实现步骤
DiskFileItemFactory - 设置一个保存临时文件的空间
ServletFileUpload - 文件上传的核心类,此类接受request,并解析
ServletFileUpload.parseRequest(request);- List 解析 request
1.创建DiskFileItemFactory工厂类,并制定临时文件和大小
2.创建 ServletFileUpload 核心类,接收临时文件,做请求的转换
3.通过 ServletFileUpload 类转换原始请求,得到FileItem集合
4.遍历集合中的元素并处理
5.判断集合中的元素是不是普通的表单项,如果是就按照普通的表单处理
6.如果不是表单项那就是文件,通过处理方式进行上传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet 是 Java Web 开发中常用的技术之一,它可以处理 HTTP 请求和响应。关于多文件上传的实现,一般有两种方式: 1. 使用 Apache Commons FileUpload 库 该库是 Apache 组织开发的一个用于处理文件上传的 Java 库,可以方便地实现多文件上传功能。具体使用方法可以参考以下代码示例: ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传文件的保存目录 String savePath = getServletContext().getRealPath("/upload"); // 判断上传文件的保存目录是否存在,不存在则创建 File file = new File(savePath); if (!file.exists() && !file.isDirectory()) { System.out.println(savePath + "目录不存在,需要创建"); file.mkdir(); } // 消息提示 String message = ""; try { // 创建 DiskFileItemFactory 对象,设置缓冲区大小和临时文件目录 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 1024 * 10); // 设置缓冲区大小为10M factory.setRepository(file); // 设置临时文件目录为 upload 目录 // 创建 ServletFileUpload 对象,并设置上传文件的大小限制 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024 * 1024 * 100); // 设置上传文件大小的最大值为100M // 解析上传的文件 List<FileItem> items = upload.parseRequest(request); // 遍历解析的文件 for (FileItem item : items) { // 判断是否为上传文件项 if (item.isFormField()) { String fieldName = item.getFieldName(); String fieldValue = item.getString("UTF-8"); System.out.println(fieldName + "=" + fieldValue); } else { // 获取上传文件名 String fileName = item.getName(); System.out.println("上传的文件名为:" + fileName); // 如果文件名为空,则说明没有选择上传文件 if (fileName == null || fileName.trim().equals("")) { continue; } // 获取上传文件的后缀名 String suffix = fileName.substring(fileName.lastIndexOf(".")); // 新建一个文件名,避免重复 String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix; // 创建上传文件对象 File uploadFile = new File(savePath, newFileName); // 将上传文件保存到指定目录下 item.write(uploadFile); message = "文件上传成功!"; } } } catch (Exception e) { message = "文件上传失败!"; e.printStackTrace(); } request.setAttribute("message", message); request.getRequestDispatcher("/message.jsp").forward(request, response); } ``` 2. 使用 HTML5 的 FormData 对象 在 HTML5 中,新增了 FormData 对象,它可以用于在客户端向服务器发送数据。结合 AJAX 技术,可以实现多文件上传功能。以下是使用 FormData 和 AJAX 实现多文件上传的示例代码: ``` <form id="uploadForm"> <input type="file" name="file" multiple> <input type="button" value="上传" onclick="upload()"> </form> <script> function upload() { var form = document.getElementById("uploadForm"); var formData = new FormData(form); var xhr = new XMLHttpRequest(); xhr.open("POST", "/uploadServlet"); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.responseText); } }; xhr.send(formData); } </script> ``` 需要注意的是,在使用 FormData 对象上传多个文件时,要将表单元素的 multiple 属性设置为 true。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值