第二章 session 管理

一. Url 重写

  • 使用继承 HttpServlet 创建 Servlet 类, 接收 Http请求, 当需要接收 GET 请求时, 重写 doGet()方法, 接收 POST请求时,重写 doPost 方法. 如果想两种请求都支持, 重写两个方法或重写 service 方法.
  • 注意: 重写 doGet方法和重写 doPost方法时 不要在方法内部调用 super.doGet() 或 super.doPost, 如果调用了 父类的 doGet()或 doPost(), 会调用父类的方法, 而父类的方法则会返回无法访问 HTTP method GET is not supported by this URL 或 HTTP method POST is not supported by this URL
    这里写图片描述
    HttpServlet 中的源码中就是这么写的, 如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String protocol = req.getProtocol();
    String msg = lStrings.getString("http.method_get_not_supported");
    if(protocol.endsWith("1.1")) {
        resp.sendError(405, msg);
    } else {
        resp.sendError(400, msg);
    }

}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String protocol = req.getProtocol();
    String msg = lStrings.getString("http.method_post_not_supported");
    if(protocol.endsWith("1.1")) {
        resp.sendError(405, msg);
    } else {
        resp.sendError(400, msg);
    }

}
  1. Cookie
  • Cookie是自动地在 Web 服务器和浏览器之间来回传递的一小块信息, 可以设置 cookie 的有效期限.
  • 对于 web 浏览器而言, 每台 Web服务器 最多可以支持20个 cookie.
  • 用户可以通过设置浏览器来拒绝接收 cookie,
  • cookie 可以设置 domain, path, maxAge 等属性, maxAge 决定 cookie 的有效期, domain 和 path 决定 cookie 的访问权限(跨域 cookie 访问), 详细再查. 后端向前端发送 cookie 要用 response调用 add方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Cookie cookieTest = new Cookie("study", "test");
    resp.addCookie(cookieTest);
    
}

如果想立刻销毁一个已存在的 cookie, 需要创建一个同名的 cookie, 然后设置 cookie 的 maxAge 属性为0, 在 add 到 response 中

Cookie cookieDie = new Cookie("study", "");
cookieDie.setMaxAge(0);
resp.addCookie(cookieDie);
  1. HttpSession
  • 这是 javaWeb 中非常重要的一个域对象, 前端与后台建立连接后, 同一用户, 只能生成一个 session, 并且只能访问它自己的 session 对象, 这是后台技术, cookie 是属于前端技术
  • session 对象, 是用户第一次访问后台时自动创建的, 可以使用 request.getSession 方法获取当前的 session 对象, 如果当前没有则创建一个 session, 还有一个带有 boolean 类型参数的方法getSession(true), 返回当前 session, 若没有创建一个, getSession(true) 等价 getSession()
  • session 存储信息使用 session.setAttribute, 取信息使用 getAttribute.
  • session 存储的信息都是存在内存中的, 所以尽量不要存储太多信息
  • session 可以存储对象, 这个对象需要实现 Serializable 接口, 以便于必要时存储到文件中,或数据库中
  • session 内部是由 Map 实现
  • 每一个 session 可使用 getSessionId获取当前 session 唯一的 id
  • session 有可以在 web.xml 中使用 session-timeout统一配置 session 的有效期限
  • session 可以使用 setMaxInactiveInterval 方法设置特定 session 的有效期限, 并且有 invalidate 方法,强制 session 过期. session.setMaxInactiveInterval(0);如果参数为0 表示永远不会过期, 但这不合理, 内存将永远不会释放, 除非卸载或停止服务.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值