10.14随堂笔记(Servlet、会话管理)

HttpServletRequest之request对象常用方法;

setAttribute(String name,Object):设置名字为name的request的参数;
getAttribute(String name):返回由name指定的属性值;
getAttributeNames():返回request对象全部属性的名字集合,结果是一个枚举的实例;
getCookies():返回client的全部Cookie对象,结果是一个cookie组;
getCharacterEncoding():返回请求中的字符编码方式;
getParameter(Sting name):获得client传送给server端的有name指定的参数值;
getParameterNames():获得client传送给server端的全部参数的名字,结果是一个枚举的实例;
getParameterValues(Sting name):获得有name指定的参数的全部值;
getHeader(“Accept-Encoding”):获取单个请求name对应的value值
getHeaders(“Accept-Encoding”):获取多个同名请求头对应的一组value值,因此返回枚举类型数据;
getHeaderNames():获取请求头的所有name值,返回的数据也是一个枚举类型的数据,将枚举中的元素依次遍历出来,根据name获取对应的value值,即可得到Http请求头的所有信息

HttpServletResponse之response对象常用方法:

getCharacterEncoding() 返回响应用的是何种字符编码
getOutputStream() 返回响应的一个二进制输出流
getWriter() 返回可以向客户端输出字符的一个对象
void setContentLength(int len) 设置响应头长度
void setContentType(String type) 设置响应的MIME类型
sendRedirect(""):重新定向客户端的请求;

//<load-on-startup>1</load-on-startup>

注意:
①、非负的整型:优先级按照 优先初始化 0 级别,数字越大初始化越靠后,也就是数字小的优先初始化。
<load-on-startup></load-on-startup>这种情况会产生异常。

<form>:form表单常用的两种属性action、method(get/post)**

传送的数据量:
GET方式:数据量长度有限制,一般不超过2kb。因为是参数传递,且在地址栏中,故数据量有限制。
POST方式:适合大规模的数据传送。因为是以实体的方式传送的。

请求转发:
一次请求,一次响应;参数(Attribute类型)可在Servlet之间共享;地址栏没有变化;速度比较快;
request.getRequestDispatcher(“targetURL”).forward(request,response);
请求重定向:
两次请求,两次响应;参数(Attribute类型)不能在Servlet之间共享;地址栏有变化;速度比较慢;
response.sendRedirect(“targetURL”);

常见的中文乱码问题。
request.setCharacterEncoding(“UTF-8”);
response.setContentType(“text/html;charset=UTF-8”);
response.setCharacterEncoding(“UTF-8”);

会话管理:

Web应用程序基于HTTP协议:

HTTP基于请求/响应模式
所有请求都是相互独立的,无连续性的
HTTP是无连接的协议
限制每次连接只处理一个请求
HTTP是无状态的协议
协议对于事务处理没有记忆能力

使用Cookie

创建Cookie对象
调用Cookie的构造方法,给出Cookie的名称和Cookie的值,二者都是字符串
Cookie c = new Cookie(“userName”,”a1234”)
设置最大时效
如果要告诉浏览器将Cookie存储到磁盘上,而非仅保存在内存中,使用setMaxAge方法(参数为秒数)
c.setMaxAge(606024*7)//一周(正数)
将Cookie放入到HTTP响应中
使用response.addCookie©
如没有这一步,将不会有任何Cookie被发送到浏览器
调用request.getCookies
得到Cookie对象组成的数组
循环数组,调用每个对象的getName找到想要的cookie
根据应用程序调用getValue方法使用这个Cookie

Cookie的优缺点
优点
可配置到期规则,数据可持久保存
不需要服务器资源,数据保存在客户端
简单性,基于文本的Key-Value对
缺点
大小受到限制(总数300;20/站点;4KB/Cookie)
用户可禁用客户端接收Cookie的功能
潜在的安全风险

Servlet容器提供Session接口来代表服务器端和客户端的会话
当一个WEB服务器为客户端开始一个会话时,创建一个新的Session对象(含有特殊ID,称为Session ID,默认用Cookie存放在浏览器中。在Tomcat中,Cookie的名称为JSESSIONID)

使用Session对象
通常分三个步骤
获取一个与请求相关联的会话
HttpSession session = request.getSession();
从Session中设置或获取一个属性
session.setAttribute(“userName”,userName);
session.getAttribute(“username”);
根据需要关闭会话
session.invalidate();
通常客户端不提供结束会话的通知,而是Servlet容器在用户处于一段非活动期后就会自动的使会话失效——这个时间段称为会话的超时期

会话失效
Session对象失效:当用户超出指定会话期时间处于非活动状态时,会话自动结束
setMaxInactiveInterval(),设置会话的超时期
通过web.xml的标签设置
使用方法invalidate()
Cookie失效
默认关闭浏览器Cookie消失
在web.xml中设定存储Session ID的Cookie存活期限

Session的方法
getAttribute():从会话对象中提取出一个之前存储的属性值,如果没有找到与名称相关联的值,则返回null
setAttribute():设置会话对象的属性名称和属性值
removeAttribute():移除与名称关联的值
getAttributeNames():返回会话中所有属性的名称
getId():返回唯一的标识符
isNew():确定会话对于客户来说是否为新创建
getCreationTime():返回会话创建的时间
getLastAccessedTime():返回客户端最近一次发送请求的时间
getMaxInactiveInterval()、setMaxInactiveInterval():取得或设置会话的超时期
invalidate():废弃当前的会话

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值