javaweb开发中Servlet三大域对象的应用(request、session、application(ServletContext))。
- request
request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。
用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。
方法:request.setAttribute(); request.getAttribute(); request.removeAttribute(); request.getParameter().
//获取参数
request.getParameter("p1");
request.getParameterValues("p2");
//设置request编码为UTF-8
request.setCharacterEncoding("UTF-8");
request.setAttribute();
request.getAttribute();
request.getParameter();
cookie
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
- session
/得到Session
HttpSession session = req.getSession();
//给Session中存数据
session.setAttribute("name","admin");
//获取Session中的数据
session.getAttribute("name");
//删除Session中的数据
session.removeAttribute("name");
//获取Session的ID
String sessionId = session.getId()
//手动注销Session
session.invalidate();
服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。
会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。
用处:常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。
方法:session.setAttribute(); session.getAttribute(); session.removeAttribute();
获得session对象方法:
在Servlet中:HttpSession session = request.getSession();
由于session属于jsp九大内置对象之一,当然可以直接使用。例如:<%session.serAttribute("name","admin")%>。
session被销毁
1)session超时;
2)客户端关闭后,再也访问不到和该客户端对应的session了,它会在超时之后被销毁;
3)调用session. invalidate();
备注: session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。(session底层依赖于cookie)
session中常用的方法
getId():获取session的唯一标识
getServletContext():代表整个web服务
getAttribute(String):获取session的节点,比如你在其中一个Servlet中通过setAttribute(String,Object)配置了相关的session信息,然后通过另一个Servlet获取这个Servlet中的session信息,就要用到getAttribute(String)这个方法
setAttribute(String,Object):设置session节点
removeAttribute(String):一出一个session节点
isNew():判断一个session是否是一个新的session
invalidate():注销session的
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码
resp.setHeader("content-type","text/html;charset=UTF-8");
//得到session
HttpSession session = req.getSession();
//通过setAttribute方法向Session中存放信息
session.setAttribute("name","小马");
//获取session相关信息,包括id,是否是新的session等
String sessionId = session.getId();
if(session.isNew()) {
resp.getWriter().write("创建Session成功,ID为:" + sessionId);
}else{
resp.getWriter().write("Session已经存在了,ID为:" + sessionId);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- Application(ServletContext)
application.setAttribute("key", value);
application.getAttribute("key");
ServletContext application = request.getServletContext();
作用范围:所有的用户都可以取得此信息,此信息在整个服务器上被保留。Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象,所有的客户端在访问服务器时都共享同一个ServletContext对象;ServletContext对象一般用于在多个客户端间共享数据时使用;
获取Application对象方法(Servlet中):
ServletContext app01 = this.getServletContext();
app01.setAttribute("name", "kaixuan"); //设置一个值进去
ServletContext app02 = this.getServletContext();
app02.getAttribute("name"); //获取键值对
ServletContext同属于JSP九大内置对象之一,故可以直接使用
备注:服务器只会创建一个ServletContext 对象,所以app01就是app02,通过app01设置的值当然可以通过app02获取。