Java Web专题
Posted 丨核桃牛奶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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¶2=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);
以上是关于Java Web专题的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段
分布式技术专题「系统服务优化系列」Web应用服务的性能指标优化开发指南(JVM篇)
maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段