芯が強い人になるESTJ-A

# servlet三大作用域:request,session,application

IT開発 Tags: 无标签 阅读: 173

javaweb开发中Servlet三大域对象的应用(request、session、application(ServletContext))。

  1. 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
  1. 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);
     }
 }
  1. 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获取。

link