Servlet 请求转发、重定向、Cookie、Session

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanse_l/article/details/89931768

目录

请求转发    重定向    Cookie    Session


请求转发(一次请求,有服务器内部转发,多个servlet处理同一请求,共享req,resp)

 

req.getRequestDispatcher("MainServlet").forward(req, resp);

重定向(重新对另一个Servlet发送请求,浏览器地址栏会发生变化,避免表单重复提交)

resp.sendRedirect("MainServlet");

Cookie:
作用:

  • 可以解决发送不同请求的数据共享,把用户信息存储到浏览器端

存储:

  1. 创建Cookie对象      Cookie c = new Cookie("uname", user);
  2. 设置Cookie的有效期      c.setMaxAge(3*24*3600);    //单位为秒
  3.   设置Cookie的有效路径    c.setPath("mainServlet");  //设置有效路径(默认该项目所有路径都携带Cookie)
  4. 添加Cookie对象到response      resp.addCookie(c);

 获取:

Cookie[] cks = req.getCookies();
for( Cookie c : cks) {
    String key = c.getName();//获取键
    String value = c.getValue();//获取值
}

删除Cookie:

  •  使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie

注意:

  •   一个Cookie只能存储一条数据,多条数据要添加多个Cookie

特点:

  •  浏览器端的数据存储技术
  •  临时存储:存储在浏览器的运行内存中,浏览器关闭即消失  (默认)
  •  定时存储:设置Cookie的有效期 存储在客户的硬盘中
  •   默认Cookie存储好后,每次请求该服务器都会携带,除非设置有效路径

API参考 :

public void setDomain(String pattern) //该方法设置 cookie 适用的域,例如 runoob.com。
public String getDomain() //该方法获取 cookie 适用的域,例如 runoob.com。

public void setMaxAge(int expiry)//该方法设置 cookie 过期的时间(以秒为单位)。
public int getMaxAge()//该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。

public String getName()//该方法返回 cookie 的名称。名称在创建后不能改变。
public void setValue(String newValue)//该方法设置与 cookie 关联的值。
public String getValue()//该方法获取与 cookie 关联的值。

public void setPath(String uri)//该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
public String getPath()//该方法获取 cookie 适用的路径。

public void setComment(String purpose)//设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
public String getComment()//获取 cookie 的注释,如果 cookie 没有注释则返回 null。

Session:

作用:

  • 同一用户发起的多次请求可以共享数据

特点

  • 创建在服务器端 
  • 依赖Cookie携带JSESSIONID识别一次会话
  • 该Cookie是临时存储的,浏览器关闭则该Cookie就清除了
  • 共享数据服务器的HttpSession对象默认存储时长为30分钟,30分钟内发起请求则重新计时

创建/获取Session对象

  • HttpSession hs = req.getSession();
  • 如果Cookie存在JSESSIONID,并且服务器的HttpSession对象未销毁,则返回
  • 如果Cookie不存在JSESSIONID 或者HttpSession对象被销毁了,则创建新的对象,并在响应中让Cookie重新存入JSESSIONID

设置和获取Session的键值

  • hs.setAttribute("uname", user);//设置
  • hs.getAttribute("uname");//获取

判断是否是新的Session

  • hs.isNew(); //是新的Session则返回true

API参考:

public Object getAttribute(String name)//该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
public void removeAttribute(String name)//该方法将从该 session 会话移除指定名称的对象。	public void setAttribute(String name, Object value) //该方法使用指定的名称绑定一个对象到该 
public Enumeration getAttributeNames()//该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。

public int getMaxInactiveInterval()//该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
public void setMaxInactiveInterval(int interval)//该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

public String getId()//该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
public void invalidate()//该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
public boolean isNew()//如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。

public long getCreationTime()//该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
public long getLastAccessedTime()//该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。

 

猜你喜欢

转载自blog.csdn.net/lanse_l/article/details/89931768