Servlet相关的常见问题

Servlet相关的常见问题

写了一些常见的概念性问题,比较宽泛,主要为了简单的搭建一下Servlet的知识体系。对于实际的代码和解决相关问题的思路还是需要多加练习的。

1 get和post的区别

get提交是基于url的,而post是基于requestbody的,所以这两者之间表面上的区别基本上就是url传参与request传参的区别。

简单区别:

get:有长度限制,只支持url的编码,只接受ASCII字符,会在url中显示参数,数据保密性差;

post:无长度限制,支持多种编码方式,数据保密性好。

一些深入的区别:(需要计网的知识)

get和post本身是http的两种请求方式,而http是应用层协议,是基于TCP的协议,所以get和post本身也是基于TCP的。

1、get会产生一个数据包,而post会产生两个,火狐浏览器特例(post只发一次包)

2、get发送后服务器会响应200并返回数据;而post浏览器会先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

3、虽然相对来说get比post可能确实性能会好,但实际来讲,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。所以大体上没必要为了一点点性能而特意的去将post改为get请求方式。

2 重定向与转发

转发:request.getRequestDispatcher("../success.jsp").forward(request,response);

特点:

  1. 地址栏不发生变化,显示的是上一个页面的地址
  2. 请求次数:只有1次请求
  3. 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
  4. 请求域中数据不会丢失

重定向:response.sendRedirect()

特点:

  1. 地址栏:显示新的地址
  2. 请求次数:2次(请求该servlet一次,响应后重定向又一次)
  3. 根目录:http://localhost:8080/ 没有项目的名字
  4. 请求域中的数据会丢失

建议:增删改用重定向(需要更新页面),查用转发(需要传递查询参数)

总结:

区别转发forward()重定向sendRedirect()
根目录包含项目访问地址没有项目访问地址
地址栏不会发生变化会发生变化
哪里跳转服务器端进行的跳转浏览器端进行的跳转
请求域中数据不会丢失会丢失

3 Session与Cookie

Session是保存在服务器端的,而Cookie是保存在客户端的。

对于一次会话,Session可以保存一些K-V(String-Object)数据,即使在不同的servlet请求中也能够获取,只要是同一个用户的会话就能得到里面的数据,因此在servlet中经常会使用session来保存一些用户数据。

而Cookie其实也是Session对象的一种,但不同的是Cookie不会占用服务器资源,它是保存在客户端的。所以我们可以将一些数据保存在Cookie中,对于同一个会话需要某些数据时,只需要得到Cookie中的某个值就可以了。

当然,因为Cookie是保存在客户端的,所以也是不太可靠的,如果是重要的数据还是应该保存在Session当中。不过Session和Cookie相对来说更多的是用来存取数据而使用的,对于数据的验证逻辑并没有影响,因为毕竟还是要取出数据进行处理。如果对于验证数据的逻辑有绝对的自信,不会引发任何安全问题,理论上倒也可以将重要数据保存在Cookie当中。总之根据实际情况来使用即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值