javaweb-cookie和session对象以及文件上传和下载

cookie

​ cookie是一种浏览器提供的技术,通过服务器的程序能将一些只须保存在客户端,或者在客户端进行处理的数据,放在本地的计算机上,例如常见的记住密码则是通过cookie来实现的。

​ cookie的格式:键值对用“=”链接,多个键值对间通过“;”隔开。

​ 在响应头可以看见:Set-Cookie:key=value

cookie的创建和发送

​ 通过new Cookie(“key”,“value”);来创建一个cookie对象,要想将Cookie随响应发送到客户端,需要先添加到response对象中,resp.addCookie(cookie);此时该cookie对象随着响应发送至了客户端。

cookie的获取

​ 在服务器端提供了一个getCookies()的方法用来获取客户端回传的所有cookie组成的一个数组,如果获取单个cookie则需要通过遍历,getName()获取cookie的名称,getValue()获取Cookie的值。

cookie到期时间的设定

​ 到期时间,是指该cookie何时失效。这个时间可以自己设定,通过setMaxAge(int time);方法设定cookie的最大有效时间,以秒为单位。

​ 大于0的整数,表示存储的秒数:若为负数,则表示不存储该cookie;若为0,则删除该cookie。

​ 负整数:cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。

​ 正整数:表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。

​ 零:cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。

cookie的注意

​ 1、在一般的站点中常常有记住用户名这样一个操作,该操作只是将信息保存在本机上,换电脑以后这些信息就无效了。而且cookie还不能跨浏览器。

​ 2、Cookie 中不能出现中文,如果有中文则通过 URLEncoder.encode()来进行编码,获取时通过 URLDecoder.decode()来进行解码。

​ 3、cookie大小只能在4kb左右,每个浏览器在同一域名下存放cookie数量有限,每个浏览器大概是50个。

cookie的覆盖

​ 如果服务端发送的cookie那么会覆盖原有的cookie;

cookie的路径

​ 在Servlet中保存的Cookie如果没有设置path,那么它的path默认为当
前Servlet的所在路径;

​ 当访问的路径包含了cookie的路径时,则该请求将带上该cookie;如果访
问路径不包含cookie路径,则该请求不会携带该cookie 。

Session

​ 对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。

​ session 无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览器,则无法取得之前设置的 session,因为每一个 session 只保存在当前的浏览器当中,并在相关的页面取得。

​Session 的作用

  • Session 的作用就是为了标识一次会话,或者说确认一个用户;
  • 并且在一次会话(一个用户的多次请求)期间共享数据。
  • 可以通过 req.getSession()方法,来获取当前会话的 session 对象。

JSESSIONID

  • SessionId 是为了标识一次会话的唯一标志。
  • 每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的 cookie;
  • 如果JSESSIONID不存在,则服务器会新建session对象,并重新标识;
  • 如果JSESSIONID存在,服务器会将客户端回传过来的ID去服务器中查找与之对应的session对象
  • 如果没找到,则服务器会新建session对象,并重新标识;
  • 如果找到,则获取 session对象,响应给客户端;

Session域对象

  • 通过 setAttribute(name,value);方法向域对象中添加数据,
  • 通过 getAttribute(name) 从域对象中获取数据,
  • 通过 removeAttribute(name)从域对象中移除数据。

Session的失效

1、达到最大不活动时间

  • Tomcat中默认最大不活动时间为30分钟。

    可以自行修改默认不活动时间,但不建议。在web.xml文件中

<session-config>
	<session-timeout>30</session-timeout>
</session-config>
  • 自己设定过期时间

    通过 session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。

    通过 getMaxInactiveInterval();方法来查看当前 Session 对象的最大不活动时间。

  • 立即失效

    手动销毁session对象 session.invalidate();

  • 关闭浏览器

    session的底层依赖于cookie,默认关闭浏览器失效。

  • 关闭服务器

    非正常关闭服务器时才会失效。

    如果是正常关闭服务器,session会被钝化到本地磁盘,下次访问时会从本地磁盘中活化出来。​

ServletContext对象

每个web应用(web项目)有且仅有一个ServletContext对象,又称为application对象。Web容器在启动时会为每个web应用创建一个ServletContext对象。

  • 作用:

    1、作为域对象,共享数据,在整个应用中都有效。

    2、获取web应用相关信息

      获取服务器版本 getServerInfo()

      获取当前项目在服务器中真实路径 getRealPath()

  • 获取ServletContext对象的方法

    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=“multipart/form-data”

​ 3、表单元素设置name属性值

2、后台代码

​ 首先需要导入第三方 jar 包,http://commons.apache.org/

​ 下 载commons-io 和 commons-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、 如果不是普通表单项,则是文件,通过处理的方式进行处理(上传)

文件下载
  • Step1:需要通过 HttpServletResponse.setContentType 方法设置 Content-type 头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型,

    例 如 ”application/octet-stream” 或 ”application/x-msdownload” 等

  • Step2:需要通过 HttpServletResponse.setHeader 方法设置Content-Disposition 头的值 为”attachment;filename=文件名”

  • Step3: 读取下载文件,调用 HttpServletResponse.getOutputStream 方法返回的 OutputStream 对象来向客户端写入附件内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb是一种基于Java语言的Web开发技术,它为开发人员提供了很多方便和实用的API和工具,其中就包含了cookie和session对象,用于实现网站的购物车功能。 首先,cookie对象是一种存储在客户端浏览器中的数据结构,它可以用来保存一些与用户相关的信息,如用户名、密码、购物车商品ID等等。购物车功能的实现就可以通过cookie来存储用户的购物车数据。对于每个添加的商品,我们可以将其ID和数量用逗号隔开,然后用一个字符串表示整个购物车的信息,再将这个字符串存储在cookie中。当用户访问购物车页面时,我们就从cookie中获取购物车信息,并解析出每个商品的ID和数量,然后在页面上展示出来。 但是,cookie对象也有一些限制,比如数据量不能太大(通常不超过4KB),并且存储在客户端的数据可能被篡改或者丢失,因此在实现购物车功能时,我们还需要使用session对象来辅助。 session对象是一种存在服务器端的数据结构,它可以用来保存用户的登录状态、购物车信息等数据。在购物车功能中,我们可以通过session对象来保存用户的购物车信息。当用户第一次添加商品时,我们就创建一个session对象,并将购物车信息存储在其中。每次用户访问购物车页面时,我们就从session对象中获取购物车信息,并将其展示在页面上。与cookie不同的是,session对象所存储的数据不会暴露在客户端浏览器中,因此更加安全。 总的来说,JavaWeb的cookie对象session对象都可以用来实现购物车功能,但是它们各有优缺点,需要根据具体场景进行选择。在实际开发中,我们可以根据业务需求和性能要求选择合适的方案,来实现一个高效、安全、可靠的购物车功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值