小案例
统计当前页面的第几个访问者
注意事项
1,防止线程安全问题
2.使用同步代码块选择锁对象,通常会使用当前servlet对象
ServletConfig对象
作用:在xml文件中存放初始化数据,在tomcat启动时就加载
在web.xml文件中利用init-param标签来定义servlet初始化
参数,包含两个子标签param-name和value,是一个键值对形式
执行流程
当Tomcat启动时,WEB容器在创建servlet时,会把初始化参数
封装到servletconfig对象中,这个对象作为init方法的参数传递
web容器:相当于一个web的xml文件,
里面存放了好多servlet的加载对象
注意:一个servlet对应一个serveltConfig
ServletContext对象
作用:利用域对象可以存放数据,在其他的
servlet中不用创建对象就能来获取
可以在xml中设置
来设置初始化参数,实现数据的共享
1.表示当前整个WEB应用,一个应用对应一个servletconfig
2.是一个域对象,可以跨域获取值,实现数据的共享
3.使用setAttribute("属性名", "属性值"),getAttribute("属性名");
转发和重定向
Web服务器接收到服务器的请求后,去调用另一个web资源
,这叫转发,但转发后还是使用的原地址路径
request域转发,req.setAttribute("name", "西施");
req.getRequestDispatcher("/ForwardTest2")
.forward(req, resp);
重定向resp.sendRedirect(req.getContextPath()
+ "/RedirectTest2");
要获取requst域对象中的数据必须使用转发。
区别
转发是带有数据,重定向只是一个地址
转发的路径不变,重定向要跳转到了另一个路径,
因此重定向不能使用request域对象
forward只需servlet路径,redirect需要加项目名
Session会话
生活中的会话:就是两个人之间简单的对话
程序中的会话:打开浏览器,访问服务器上的内容,关闭浏览器
登录业务流程:打开浏览器,访问登录页面,输入 用户名 密码 验证码,发送给服务器,服务器验证消息,返回给浏览器,浏览器加载主页
发现:在百度首页登录了用户名,在所有的
百度服务的页面下都是一个登录的状态
购物车业务流程:淘宝上选择一个商品,加入购物车。
打开浏览器,淘宝网,登录账号,查看购物车,也可以看到手机app添加的商品
这里的购物车里面的数据在哪保存的?
利用会话控制技术:管理浏览器和服务器之间会话过程中产生的数据
会话控制技术
1.Session技术
特点
会话数据保存在服务上,可以生成一个临时或永久的temp文件
HttpSession
1.获取Session对象
停止使用Session对象:HttpSession getSession(false)
默认为true
2.设置Session对象
获取Session有效时间:void setMaxInactiveInterval(time);
invalidate()销毁Session,getId()获取id
3.Session域对象
可以保存数据属性到Session中
set/get/removeAttribute("name")可以操作里面的数据
2.Cookie技术
核心方法:value值不能为中文
1.创建对象:new Cookie("name","value")
2.设置Cookie
setValue("value")设置value值
setPath(path)设置Cookie的有效范围
setMaxAge(time)设置Cookie的有效时间
3.发送Cookie到浏览器
resp.addCookie(cookie)发送Cookie给浏览器
4.服务器接受浏览器发送过来的数据
req.getCookies()返回cookie数组
局限性
1,限制数据类型必须是String
2.cookie对象中不能保存中文,不然会报错
IllegalArgumentException
3.Cookie保存数据的容量较小,只有4KB
要解决这些缺点,就要使用Session,
但是如果浏览器没打开Cookie,Session是不能使用的。