小汤学编程之JavaEE学习day05——会话管理、文件上传与下载、Ajax

本文介绍了JavaEE中的会话管理,包括HTTP协议、会话概念、会话跟踪技术(隐藏表单域、Cookie、URL重写、Session)。接着讲解了文件上传和下载的实现步骤,以及如何将这些功能整合到工具类中。最后,探讨了JS和jQuery中Ajax的基本使用,展示了前后端代码示例。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、会话管理
1.HTTP协议     2.会话的概念     3.会话跟踪技术     4.会话跟踪技术分类(四种)
二、文件上传与下载
1.上传     2.下载     3.上传和下载合并优化成工具类
三、Ajax
1.JS中Ajax的基本使用     2.jQuery中Ajax的使用


一、会话管理

1.HTTP协议

http协议,就是浏览器和服务器之间进行“沟通”的一种规范。我们在看空间,刷微博…都是在使用http协议,当然,远远不止这些应用。

TCP/IP协议和UDP协议

TCP协议是一种可靠协议,即数据包不会丢失;UDP是一种不可靠协议,丢失几个数据包对它来说无关紧要。

很明显,UDP协议不符合Web应用的需求。

HTTP协议的由来

TCP协议是基于连接和三次握手的,虽然具有可靠性,但人具有一定的缺陷。但试想一下,普通的C/S架构软件,顶多上千个Client同时连接,而B/S架构的网站,十万人同时在线也是很平常的事儿。如果十万个客户端和服务器一直保持连接状态,那服务器如何满足承载呢?

这就衍生出了http协议。基于TCP的可靠性连接。通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源。这样既保证了资源可用,也吸取了TCP的可靠性的优点。

正因为这点,所以大家通常说http协议是“无状态”的,也就是“服务器不知道你客户端干了啥”,其实很大程度上是基于性能考虑的。

所以,Http是无状态的

2.会话的概念

用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话。会话跟踪技术

3.会话跟踪技术

HTTP是一种无状态协议,每当用户发出请求时,服务器就做出响应,客户端与服务器之间的联系是离散的、非连续的。每当用户在同一个网站的多个页面之间转换时,根本无法知道是否是同一个客户,会话跟踪就可以解决这个问题。当一个客户在多个页面之间切换时,服务器会保存该用户的信息。

4.会话跟踪技术分类(四种)
隐藏表单域

将字段隐藏在HTML表单中,但不在客户端显示。比如在第一张页面中输入用户名和密码登陆,服务器生成响应返回第二张页面。当第二张页面提交时可能仍然需要知道来自第一张页面中的用户名。那么就可以通过隐藏表单域来实现这一连续的过程。当第一张页面提交后,服务器端作出响应返回第二张页面,此页面中用隐藏域记录了来自登陆时的用户名。
①在form表单中添加对应隐藏域:

<input type=“hidden” name=“username” value=“Sunny”>

②在请求中获取值:

String name = request.getParameter(“username”);
Cookie

①Cookie简介:
Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问 Cookie 信息 。

目前有些 Cookie 是临时的,有些则是持续的。临时的 Cookie 只在浏览器上保存一段规定的时间,一旦超过规定的时间,该 Cookie 就会被系统清除 。

原理:将一个文本文件写入客户端的硬盘中,将要记住的内容以键值对的形式写在文本文件中 。

②向客户端添加Cookie:

String nameKey = URLEncoder.encode("姓名", "utf-8")   ;// cookie保存中文报错
String nameValue = URLEncoder.encode("张三", "utf-8")   ;// cookie保存中文报错
		
Cookie cookie = new Cookie(nameKey, nameValue);
cookie.setMaxAge(60);// 秒
response.addCookie(cookie);

③Cookie年龄的设置:
cookie.setMaxAge(maxAge);

  • 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。
  • maxAge如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。默认为–1。
  • maxAge如果为0,表示删除该Cookie。
  • 设置Cookie永不过期: 设置年龄参数为Integer.MAX_VALUE

④获取Cookie:

Cookie [] cs = request.getCookies();
if(cs!=null){
   
	for(Cookie c: cs){
   
		// URLDecoder.decode解决中文存取的问题
		String cookieKey = URLDecoder.decode(c.getName(), "utf-8");
		String cookieValue = URLDecoder.decode(c.getValue(), "utf-8");
	}
}

⑤Cookie总结:

  • 只能往Cookie中写字符串,不能放对象
  • 放在客户端不安全
  • 一个WEB程序只支持200多个Cookie
  • 客户端可以禁止Cookie
URL重写

①用途:解决了客户端禁止了Cookie,又要传SessionID的问题。
②原理:将sessionID添加到URL的后面,类似查询字符串的方法。
③方法:
方法一String encodeURL(String url)重写给定的url,包含sessionID。

String newUrl = resp.encodeURL(req.getContextPath()+"/new.jsp");
resp.sendRedirect(newUrl);

方法二String encodeRedirectURL(String url)使用sendRedirect方法时,重写给定的url,包含sessionID。

这2个方法只有在客户端禁用了cookie才会生效。

④两种方法的对比:

  • 共同点:都对url附加上jsessionid参数进行了处理,如果需要,则在url的path后面附加上;jsessionid=xxx;如果不需要则直接返回传入的url。

  • 不同点:encodeURL在附加jsessionid之前还对url做了判断处理:如果url为空字符串(长度为0的字符串),则将url转换为完整的URL(http或https开头的);如果url是完整的URL,但不含任何路径(即只包含协议、主机名、端口,例如http://127.0.0.1 ),则在末尾加上根路径符号/。
    也就是encodeURL如果进行了编码,则返回的URL一定是完整URL而不是相对路径;而encodeRedirectURL则不对URL本身进行处理,只专注于添加jsessionid参数(如果需要)。

Session

HttpSession接口实现了会话机制,并用Session来跟踪客户的状态。Session是在一段时间内,单个客户与Web服务器的一连串的相关的交互过程。在一个Session中客户可能会多次请求访问同一个页面,也有可能请求访问不同的服务器资源。

原理:WEB容器为每个客户端会提供一个session,当调用相应的方法时,该session就会产生,并同时产生一个唯一的session ID,通过Cookie发送到客户端进行保存,并可以向session里存数据(对象),那么该客户端在由该页面跳转到 下一个页面后,就可以把前面页面中向session中共享的数据取出来。

①session的常用方法:

方法 说明
reques
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值