黑马程序员技术交流社区
标题:
会话技术笔记整理及相关知识点
[打印本页]
作者:
hw1037585418
时间:
2019-8-5 16:48
标题:
会话技术笔记整理及相关知识点
1.会话技术
会话: 打开浏览器,不断的访问....然后关闭浏览器,这个过程称之为一次会话
作用: 用来共享数据, 这个存储的方式很明显比request域要大,比ServletContext域要小,一般情况这个共享数据是一次会话有效
2.Cookie
是一种客户端会话技术, 将数据保存到客户端浏览器中
增: ----> 从服务器中写东西给浏览器, 找resp, 设置一个响应头 set-cookie
1.创建Cookie(String key,String value); ---->只能存字符串的键值对
2.通过resp中addCookie(cookie对象);
删: ----->
将maxAge调整成"零"
改: ---->
1.创建Cookie(String key,String value); ---->只能存字符串的键值对
2.通过resp中addCookie(cookie对象);
查: ---->从浏览器会携带cookie过来, 找req ----> 设置了一个请求头 cookie
Cookie[] arr = req.getCookies();
1.常见的方法:
1.构造:
Cookie(String key,String value)
2.方法
String getName(); ---->获取cookie的键
String getValue(); ---->获取cookie的值
void setMaxAge(int seconds) ---->调整cookie的存活时间
正数: -----> 指定时间有效, 默认单位是秒
负数 --->默认一次会话有效
零: ---->删除cookie
Cookie c = new Cookie("aaa","123");
Cookie c1 = new Cookie("aaa","");
setPath("路径") ------> 如果不给值, 默认当前项目的虚拟路径, 也就是有效范围是当前项目;
setDomain("路径") ---->可以在不同的服务器之间共享cookie
2.cookie的有效时间
默认是一次会话有效, 原因默认MaxAge的值是一个负数
3.是否能够存中文
tomcat8以后可以存中文的, 但是我们不用, 原因是他不能存特殊字符!!!!所以还是延用之前的做法
如果有特殊字符要存, 建议用URLEncode编码一下, 取的时候记得要用URLDecode去解码一下
URLEncoder.encode(要编码的字符串,"原来的编码")
URLDecoder.decode(要解码的字符串,"组成的编码")
4.Cookie的范围
默认只在当前项目有效
可以通过setPath做到在同一个服务器中,不同项目来共享数据 day15和day16项目之间想要共享数据,我们可以将setPath("/")
可以通过setDomain("一级域名"),可以在不同的服务器中共享cookie
3.JSP
作用: 为了弥补HTML的缺陷而得到东西, HTML不能写逻辑, html没有办法写java代码, jsp可以, 能够简化书写
本质: 其实JSP本质就是一个Servlet, 如果没有他的话, 我们动态资源只有Servlet, 所有的书写标签的动作都的由我们自己去写很恶心
而jsp老厉害, 既可以写HTML的代码还可以java的代码, 而jsp引擎自动帮我们生成jsp对应的Servlet类, 所有输出动作,由jsp引擎帮
我们自动生成!!!!!
jsp中如何书写java代码
<%%> : 生成的代码在service方法内部
<%!%>: 在成员区域
<%=%>: 输出页面上面,他也是service方法中,out.print(内容);
面试:
1. <%
public void method(){
}
%>
分析: 这个典型错误, 因为<%%>在service方法里面, 方法不能嵌套方法
2.
<%
private String name;
%>
分析: 这个典型错误,因为<%%>在service方法里面,不用权限修饰符修饰
3.
<%! int a; %>
分析:正确,相当于定义一个成员变量
4.
<%
int a;
%>
<%
System.out.println(a);
%>
分析: 典型错误,a是局部变量, 局部没有赋值不能使用
5.
<%
int a;
%>
<%
int a = 10;
System.out.println(a);
%>
分析: 典型错误, 在一个方法中不能出现重名的变量
6.
<%= System.out.println("你好") %>
分析: 典型错误, 因为<%=%> 是out.print()小括号里面的东西
7.
<%
int a = 10;
%>
<%= a;%>
分析:典型错误,因为<%=%> 是out.print()小括号里面的东西
如何学好jsp
jsp = HTML + JAVA + 内置对象
内置对象
9个内置对象
request
response
有缓冲区d
out
有缓冲区abc
out.write("a");
out.write("b");
out.write("c");
resp.getWrite().write("d");
4.Session(HttpSession)
服务器端的技术,说白了, 他的数据保存到服务器中,而且是一个域对象
方法:
setAttr...
getAttr...
removeAttr...
获取:
req.getSession();
原理:
服务器怎么保证张三用户拿到永远的"张三的数据"
他底层基于cookie的, 每个客户的浏览器中保存cookie这个可以看成打开session的钥匙
1.当浏览器关闭后,服务器不关闭,我们获取的session是不是同一个?
答:不是, 因为session基于cookie, 而浏览器关闭后, cookie就消失了, 钥匙失效了, 在次打开浏览器,就不会带着原来的钥匙过去!!!
解决: 我们可以延长cookie的有效时长
面试:session的销毁时机是一次会话结束!
答:错误的, session 默认存活时间是30min, 让session失效并不是session销毁了, 是cookie不见了!!!!
2.当浏览器不关闭, 服务器关闭,
获取的session不是同一个, 但是我们知道数据可以得到,tomcat有活化和钝化机制, 而且tomcat自带的!!!!!!
注意: idea能够完成钝化, 不能完成活化, 原因是因为当idea启动之后会将work目录删除掉, 也会连钝化的文件也会被删掉
1.JSP
1.指令
page ---->控制jsp转成Servlet里面的代码
errorPage
lang....
content-type
buffer
include
可以将其他页面包含进来
taglib
可以引用一些标签库
2.注释:
<%-- --%>
3.JSP
pageContext ----> 只有在当前页面有效, 可以获取其他的八大内置对象
request ----> 一次请求
session ----> 一次会话
servletContext ----> 整个项目
response ---->做响应的
out ----> 向页面输出的东西
page ---->this,当前的jsp
exception ---->异常对象
servletConfig ----->servlet配置对象
需要大家掌握
pageContext
request
session
2.jsp以后只做展示数据的操作, 他的数据从Controller而来, 而Servlet是控制层的体现, 而Servlet和jsp共享数据采用域对象共享数据,
jsp的最大的作用就是从域对象中将Servlet共享的数据获取出来展示到页面就完事了!!!!要学会el表达式和jstl就可以很方便获取数据
3.EL
1.运算符
算术运算符: + ,- , * ,/(div), %(mod)
比较运算符: >,<,>=.....
逻辑运算符: &&(and),||(or) ,!(not)
空运算符: empty ----> 判断"字符串","数组","集合"的是否null或者长度是否为0
三元运算: boolean表达式 ? 表达式1 :表达式2
2.el只能从域中获取数据
语法:
requestScope
pageScope
sessionScope
applicationScope
格式:
字符串的键对应的字符串的值
格式:
1.${ 域对象的代号.键名 }
2.${ 键名 } ----> 从小的域开始查找直到找到为止
3.${域对象['键']} ---->这是最通用的格式
字符串的键对应的java对象
格式: ${键.属性名};
本质:调用getter方法
像这种获取值的方式专业叫做"OGNL" ---->对象图导航语言, 直白说就是只要有getter方法就可以一直"点"下去!!!!但是其实调用的是对应的getXxx的方法
概念:
属性: 指的是getXxx以及setXxx的xxx
成员变量:类中方法外定义的变量
字符串的键对应的List集合或者数组对象
格式:${ 键[索引]}
字符串的键对应的Map集合对象
格式: ${键.key}
如果键比较特殊需要用 ${键['key']}
3.el的隐式对象
注意:只能在el表达式中使用
pageContext
requestScope request域对象的代号
pageScope pageContext域对象的代号
sessionScope
applicationScope
cookie 操作cookie
header 请求头
headerValues 一个键多个多个值的请求头
param 获取参数一个键对一个
paramValues 获取参数一个键对应多个值的
initParam 获取全局初始化
注意:
${ pageContext.request.contextPath}
典型错误:
${request.contextPath }
原因: request不是el的隐式对象,应该找pageContext.request
4.JSTL
弥补el中的不足存在, 他的出现替换<%%>
if: ---->重点!!!!!!
<c:if test="结合el表达式来去使用"></c:if>
test:需要一个boolean值
choose:
<c:choose>
<c:when test="boolean值,el表达式"></c:when>
<c:otherwise></c:otherwise>
</c:choose>
foreach:
遍历次数
var
begin
end
step:这个可以不加, 不加默认是1
遍历容器
var
items
varStatus
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2