zoukankan      html  css  js  c++  java
  • Java Web专题(一)

    1.GET请求和POST请求
    2.RESTFUL API
    3.Session VS Cookie
    4.Forward VS Redirect
     
    GET请求和POST请求
    可以简单的认为HHTP中的POST GET PUT DELETE对应着CRUD
    区别:
    1)从语义上讲GET更偏向于查询操作,即GET请求不会对后台数据产生影响;而POST则不同
    2)一般来讲GET请求是幂等的
    Ps看到一个关于幂等很好的定义 abs(a) = abs(abs(a))
    3)GET将数据放在url上,而POST将数据放在HTTP body中;POST相对安全
    4)如果使用POST就无法保存书签

    RESTFUL API
    参考链接:https://juejin.im/entry/59e460c951882542f578f2f0
    1)URL表示资源;两种方式 /employees & /employees/56
    2)名词+方法替换动词url /createEmployee -> POST + /employees
                /updateEmployee -> PUT /employees/56
    3)条件筛选时,使用?添加条件 GET /employees?state=internal&maturity=senior
    4)非资源请求使用动词url GET /calculate?para2=23&para2=432
      POST(创建) GET(读取)  PUT(更新) DELETE(删除)
    /employees 创建一个新员工 列出所有员工 批量更新员工信息 删除所有员工
    /employees/56 (错误) 获取56号员工的信息 更新56号员工的信息 删除56号员工

     
     
     
     
    Session & Cookie
    HTTP是一个无状态协议,如何维持同一个用户的会话?
    对于客户的第一个请求,容器会生成一个唯一的sessionId给到客户端,客户再以后的每一个请求中发回这个sessionId,这样容器就知道客户的身份了
     
    客户端和容器如何交换SessionId?
    最常用的方法是通过cookie,在服务端给到客户端的response中,header中有一个叫Set-Cookie的属性,用于存放JSESSIONID;在客户端到服务端的request中,header中有一个叫Cookie的属性,用于存放JSESSIONID
     
    如果禁用cookie这套机制怎么玩的转?
    用户禁用cookie后,会忽视response的header中的Set-Cookie;此时需要换一种办法来交换sessionId
    1)URL重写
    origin url + ;jsessionid=1231231
    注意这里是服务端返回给客户端的,在响应发回的html中(比如href)
    2)表单隐藏
     
    分布式环境如何实现session共享?
    参考链接:https://blog.csdn.net/u010028869/article/details/50773174?ref=myread
    1)nginx对特定的sessionId进行映射,即一个用户的请求只会交给一个固定的机器处理
    优点:无须对session做任何处理只要存在本机即可
    缺点:如果某台机器挂掉,那么这台机器保存session的用户都要重新登录
    2)session复制,即所有的服务器共享session,任何一个服务器上session发生改变,都同步到其他服务器
    优点:容错性较好,即使机器挂掉也ok
    缺点:容易造成网络堵塞
    3)session第三方共享,redis(集群) or db(集群)
     
    Forward VS Redirect
    二者都可以称为请求转发,前者称为直接请求转发,后者称为间接请求转发
    Redirect:客户端发送一个http请求,服务端Servlet1处理,之后执行response.sendRedirect("target url"),之后客户端再次向target url发送http请求
    Forward:客户端发送一个http请求,服务端Servlet1处理,之后调用requestDispatcher.forward(request,response),进行请求转发,直接转发到Servlet2处理,最后处理完成后将response返回到客户端
    举个例子:Servlet将模型传递到jsp就是通过forward
     
    RequestDispatcher view = request.getRequestDispatcher("result.jsp");
    view.forward(request,response);
    

      

  • 相关阅读:
    Centos7安装Redis-单节点
    解决物理机U盘安装Kali Linux2018.1,光驱无法加载问题
    做销售如何跟单,逼单!共20招!(转)
    销售沟通技巧(转)
    rails gem (2015-07-16)
    Foundation
    Redis TTL 为0
    Introspection反射机制
    will_paginate
    Linux下Rsync+Inotify-tools实现数据实时同步
  • 原文地址:https://www.cnblogs.com/luyu1993/p/9245152.html
Copyright © 2011-2022 走看看