Servlet三大域对象,Jsp四大域对象
域对象的作用:保存数据,获取数据,共享数据.
Servlet三大域对象
对象名称 对象的类型
request HttpServletRequest
session HttpSession
application ServletContext
request
生命周期:
创建:客户端向服务器发送一次请求,服务器就会创建request对象.
销毁:服务器对这次请求作出响应后就会销毁request对象.
有效:仅在当前请求中有效。
作用:
①获取表单提交参数: request.getParameter()
//从login.jsp中获取用户名和密码
String username = request.getParameter(“username”);
String password = request.getParameter(“password”);
String imageText = request.getParameter(“imageText”);
②传值到表单: request.setAttribute()
if(user == null) {
//用户名和密码不匹配
request.setAttribute(“msg”, “用户名和密码不匹配!”);
return “/jsp/login.jsp”;
}
session
生命周期:
创建:服务器端第一次调用getSession();(保存在服务器内存中)
销毁:
1.非正常关闭服务器(正常关闭session会序列化,再次启动服务器session会被反序列化);
2.session过期了默认30分钟.
3.手动调用session.invalidate();
注意:关闭浏览器再次访问会找不到session的会话id而不是session被销毁了。
有效:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。
作用:
①读取生成的验证码信息:
// 图片的验证码
String imageMsg = (String) request.getSession().getAttribute(“imageMsg”);
②用户保持登录状态:
//登录成功 保存用户登录状态
request.getSession().setAttribute(“user”, user);
③购物车物品保存:
//将cart放入session中
request.getSession().setAttribute(“cart”, cart);
application
生命周期:
创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext类.
销毁:服务器关闭或者项目从服务器中移除的时候.
有效:此信息在整个服务器上被保留。
区别
request: 每一次请求都是一个新的request对象,如果在web组件之间需要共享同一个请求中的数据,只能使用请求转发.
session: 每一次会话都是一个新的session对象,如果如果需要在一次会话中的多个请求之间需要共享数据,只能使用session.
application: 应用对象,Tomcat启动到关闭,表示一个应用,在一个应用中有且只有一个application对象,作用于整个Web应用,可以实现多次会话之间的数据共享.
共同点
1.设置作用域中的共享数据(保存数据)
作用域对象.setAttribute(String name,Object value);
2.获取作用域中的共享数据(获取数据)
Object value=作用域对象.getAttribute(String name);
3.删除作用域中的指定的共享数据(删除数据)
作用域对象.removeAttribute(String name);
Jsp四大域对象
对象名称 对象的类型
pageContext PageContext
request HttpServletRequest
session HttpSession
application ServletContext
pageContext
有效:当前页面(最小的一个),超过这个页面就不能够使用。
作用:
①在当前页面和当前页面中的标签共享数据:
void setAttribute(String name, Object value);
Object getAttrbiute(String name, Object value);
void removeAttribute(String name, Object value);
②全域: pageContext.findAttribute(“内容”)在四个域中搜索数据
自动搜索数据顺序:page域->request域->session域->application域(context域)
③代理其他域对象:通过pageContext向request、session、application对象中存取数据
void setAttribute(String name, Object value, int scope):在指定范围中添加数据;
Object getAttribute(String name, int scope):获取指定范围的数据;
void removeAttribute(String name, int scope):移除指定范围的数据
④获取其他内置对象:通过pageContext对象获取其它8个内置对象(pageContext对象本身也属于jsp 9大内置对象之一)
void setAttribute(String name, Object value, int scope):在指定范围中添加数据;
Object getAttribute(String name, int scope):获取指定范围的数据;
void removeAttribute(String name, int scope):移除指定范围的数据
⑤获取其他内置对象:通过pageContext对象获取其它8个内置对象(pageContext对象本身也属于jsp 9大内置对象之一)
JspWriter getOut():获取out内置对象;
ServletConfig getServletConfig():获取config内置对象;
Object getPage():获取page内置对象;
ServletRequest getRequest():获取request内置对象;
ServletResponse getResponse():获取response内置对象;
HttpSession getSession():获取session内置对象;
ServletContext getServletContext():获取application内置对象;
Exception getException():获取exception内置对象;
Jsp 9大内置对象,EL表达式11大内置对象
request
有效:一JSP网页发出请求到另一个JSP网页之间,随后这个属性就失效。
作用:
①设置request范围的数据:
<%request.setAttribute(“name”,”xxx”);request.setAttribute(“age”,12);%>
②获取request范围的数据:
//获取购物项ci的product.cid属性
${ci.product.pid }
③获取部署的应用程序名:
${pageContext.request.contextPath }/user
相当于pageContext.getRequest().getContextPath()
session
有效:一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。比如断网或者关闭浏览器。
作用:
获取session:
//已知user已经在session当中,现取出user来判断是否为空
emptyuser//为空则显示登录按钮emptyuser//为空则显示登录按钮{not empty user }//不为空则显示“xxx,你好”
//也可以用来判断购物车是否为空
${empty cart || empty cart.cartItems } //为空则显示“亲,你的购物车空空如也,请到处逛逛吧~~~”
application
有效:在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长。
作用:设值与取值