常见的域对象(掌握)
1.ServletContext 表示应用级别的域对象
2.request 域对象
3.session 会话的域对象
4.cookie 会话的域对象
request 域对象(掌握)
这个域对象是和请求相关的域对象,域对象中存储的值只能在同一个request中使用
request域在转发中使用比较多
request.getRequestDispatcher("路径").forward(request,response);
//重定向
response.sendRedirect("路径");
转发和重定向的区别:(掌握)
1.转发只有一次请求,这个转发会在服务器内部完成。重定向是两次请求,首先请求来到服务器,服务器给浏览器发送一个新的url,让浏览器重新去请求新的url
2.转发浏览器的网址不会发生改变,重定向浏览器的网址会发生改变
3.转发只能够转发到服务器的内部资源,重定向可以定向到外部资源
在request域中保存的信息只能在转发中使用
关于转发和重定向的路径问题:(掌握)
转发技术: / 代表的含义是当前web应用的根路径 /指定资源
重定向技术: / 代表的含义是tomcat中webapps目录 /项目名称/指定资源
会话引入(了解)
ServletContext
HttpServletRequest
HttpSession
Cookie
用ServletContext来实现登录:
用户在页面输入账号密码 zhangsan 123
登录请求来到loginServlet
接下来在loginServlet保存数据 this.getServletContext().setAttribute(“user”,user);
先开一个谷歌 输入账号张三 123
再开一个firefox 输入账号李四 123
我们想要用户数据在一次会话中保存,那么我们就要来学习会话技术。
//生活中会话
从我打电话过去,到对方接收 ,会话一旦建立,就可以进行通信了,通信的时候必然会有数据的传递
//web中的会话
一次会话:打开浏览器–>访问服务器的数据—>关闭浏览器 (这句话有问题,后面会纠正)
cookie技术:(掌握)
会话中产生的数据是保存在浏览器中(不是存在服务器上的)
自动登录
怎么使用cookie技术:
1)构造Cookie对象
new Cookie(java.lang.String name, java.lang.String value)
2)发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
3)服务器接收客户端发送的cookie
Cookie[] request.getCookies() : 接收cookie
cookie是如何工作的:(掌握)
1.第一次请求服务器的时候,在服务器创建一个cookie对象,然后将该cookie对象加到响应头中,发送到浏览器
2.浏览器接收到服务器发送过来的cookie信息之后,会将该cookie信息保存起来
3.当浏览器再次向服务器发送请求的时候,会自动将所有保存的cookie信息放到请求头中一起提交到服务器
4.服务器就可以获取来自请求中的cookie数据了
cookie的使用细节:(掌握)
cookie.setMaxAge(24*60*60); //cookie数据一天后过期
cookie.setMaxAge(-1) ; //表示关闭浏览器的时候cookie数据就消失,默认是负数
cookie.setMaxAge(0) ; //表示立马清空该cookie数据
cookie只能够保存非中文的字符串数据,每个cookie最大为4kb,每个站点最多可以存20个cookie
关于setPath(“”) 方法
Cookie c2 = new Cookie("pwd","123456");
c2.setPath("/3.6Pro/FirstServlet");
response.addCookie(c2);
上面代码的含义:
1.首先c2会存放到浏览器的/3.6Pro/FirstServlet路径下
2.只有我们通过浏览器来访问/3.6Pro/FirstServlet这个路径的时候,请求头中才会把c2的信息带过来,访问其他路径不会携带该c2信息
HttpSession
HttpSession在会话中的数据是保存到服务器的
HttpSession常用的方法:
HttpSession s1 = request.getSession( ) ; 获取一个session对象
s1.setAttribute(“key”,”value”);
s1.getAttribute(“key”);
s1.removeAttribute(“key”);
Session的实现原理:
1.当第一次访问服务器的时候,如果servlet中写了HttpSession session = request.getSession()代码,则会创建一个新的session对象,给这个session对象分配一个唯一的sessionID
2.tomcat服务器会创建一个cookie对象,然后将这个cookie对象放到response中返回到浏览器
Cookie cook = new Cookie(“JSESSIONID”,sessionID);
3.浏览器接收到服务器的cookie响应数据,会将该cookie信息保存到起来
4.当第二次再去请求服务器的时候,如果servlet中同样写了HttpSession session = request.getSession()代码,这个时候在请求中会自动包含Cookie信息,cookie信息中就自带了sessionID,这个时候服务器内部就是根据sessionID来查找当前sessionID对应
的session对象是否存在,如果存在,即返回该对象,如果不存在,则创建一个新的session
如果我们想在关闭浏览器之后重新打开浏览器还能够访问之前所存的session数据,那么我们需要设置cookie有效时间
HttpSession session = request.getSession();
System.out.println(session.getId());
session.setAttribute("name", "tom");
Cookie c = new Cookie("JSESSIONID", session.getId());
c.setMaxAge(24*60*60);
response.addCookie(c);
会话 :打开浏览器 --->请求 --->关闭浏览器 一次会话 (这句话是有问题的)
当我们关闭浏览器的时候,存在服务器的session对象没有销毁,因此浏览器的关闭并不涉及session对象的销毁
Session什么时候销毁呢?
1.正常情况下,如果我们没有设置session的有效时间,那么默认session会存在30分钟(从最后一次访问服务器的时间开始算起)
2.如果我们手动设置了session的有效时间,那么按我们设置的进行
如何设置session的有效时间呢?
1.session.setMaxInactiveInterval(10);
2.Session的全局配置,在web.xml中添加如下代码
<session-config>
<session-timeout>1</session-timeout>
</session-config>
3.invalidate(); 手动销毁session,这个方法调用之后,session对象就销毁了
Session在使用的时候要注意:
在哪个session中存储的,就在哪个session中读取
关于用户登录后保存用户数据:
Session来做:
A用户通过火狐浏览器来访问我们loginServlet
HttpSession s1 = request.getSession();
s1.setAttribute("user",user);
B用户通过谷歌浏览器来访问我们loginServlet
HttpSession s1 = request.getSession();
s1.setAttribute("user",user);
Javabean的使用
1.需要导入两个包
commons-beanutils-1.8.3.jar
commons-logging-1.1.3.jar2.使用Javabean的核心类 BeanUtils
3.BeanUtils.populate(javaBean对象,map集合) 这个方法会自动将map集合中的数据放到javaBean对象中