同一个账号同时只能登陆一次:
账号唯一,则登录同时记录账号(list/set)
每次登陆需要判断,当前账号是否已经存在
存在则不许登陆
不存在则登陆
HttpServletRequest :一组请求、响应
两个业务流程跳转,
如果使用forward:
req.getParameter()获取页面中的参数
req.getAttribute()获取资源之间的共享对象
如果使用sendRedirect
request对象无法共享数据
HttpSession :一个客户端一系列相关的请求、响应
多组业务流程跳转:
如果使用forward:
session.getAttribute()获取资源之间的共享对象
如果使用sendRedirect
必须使用session.getAttribute()
ServletContext :整个web应用
多组业务流程
某个用户设置的信息,给其他用户访问
给当前系统中所有的用户访问的数据
=========================================================
setAttribute(String name,Object o);
getAttribute(String name):Object o;
removeAttribute(String name);
=========================================================
session的作用:
标识当前客户端
一组相关操作只能属于当前用户
session的底层实现机制:
cookie:由服务器端生成,发送给客户端,并保存在客户端的一小段用于描述客户信息的文件
1 当客户首次访问服务器时,服务器端给当前用户创建一个cookie
2 服务器保存信息: cookie-------用户
3 服务器把生成的cookie对象发送给客户端
4 客户端拿到cookie信息,则保存在本地文件中
5 客户端继续访问服务器,必须读取cookie信息发送请求给服务器
6 服务器拿到请求,以及客户端对应的cookie
7 服务器用获取到得cookie在内部保存的对应关系中查找其对应的用户信息。返回给客户
JSESSIONID=A17683EEAA6E6B1568FECC942BEDAE57
url rewrite:
给所有的请求url后面追加参数信息。如:
add?jsessionid=A17683EEAA6E6B1568FECC942BEDAE57
delete?jsessionid=A17683EEAA6E6B1568FECC942BEDAE57
url = "add";
url += req.getSession().getId();
==>
resp.encodeUrl("add"):String ==>add?jsessionid=A17683EEAA6E6B1568FECC942BEDAE57
resp.encodeRedirectURL("add")
hidden:
<input type="hidden" name="jsessionid" value="A17683EEAA6E6B1568FECC942BEDAE57">
addCookie--->AddCookieServlet---->index.html
index.html--->ShowCookieServlet
监听器:
观察者模式
ServletRequestListener 监听ServletRequest的创建和销毁
事件源 ServletRequest
事件对象 创建/销毁
事件监听 ServletRequestListener
HttpSessionListener 监听HttpSession的创建和销毁
ServletContextListener 监听ServletContext的创建和销毁
监听器编程:
1 编写监听器类,实现相应的接口,并实现其内部的两个方法
2 把监听器类配置给web容器管理
<listener>
<listener-class>
listener.MyServletContextListener
</listener-class>
</listener>
接口的作用:
1 程序员并行开发
2 解耦合
IStuMgmtDAO dao= new StuMgmtDAOImpl();
耦合在每个servlet处理类的源代码中,维护很难
解决:
dao应该是整个应用共享一个对象
即,将dao对象放在servletContext范围中保存
dao应该什么时候创建:
项目启动,则dao创建
项目关闭,则dao销毁
===》ServletContextListener
*1 第一页 上一页 下一页 最后一页
rownum
2 1 2 3 ... 18 19 20 ___跳转