熬之滴水穿石:Servlet--Web万物之源(4)

                                   28--Request与Post

在HTTP中特别要注意Get和Post方法的区别。这里又会和一个非常重要的概念扯到一起那就幂等性。HTTP的幂等性是就是指一次和多次请求某一个资源应该具有同样的副作用。这种定义是属于语义范畴,其实这样的规范也没有办法通过消息格式等语法手段来定义它,但幂等性在分布式系设计领域是一个重要的概念。Http Get是得到服务器上的资源,但它是不会修改服务上任何资源的。所以Get是幂等的,而且不会任何副作用。而Post则不是,Post的提交动作就可能用于不可逆转的事物,所以是需要特别注意的。

Post和Get的请求都是由客户端浏览器发送而来的,一般来说通过链接也是可以看出来的。一般的链接我们都可以认为是Get方法,在client端的HTML表单文件中,如果在form method写了等于POST方法,那么做相关的SUBMIT动作时就是POST提交的方式了。一般默认的方法为Get方法,当客户端的HTML表单中设置了Get和Post方法后,提交给服务端后。容器就会让线程调用相关的Servlet中的doGet和doPost方法。参数的传递在Servlet方法里用的都是通过 Request.getParamter("")的方式获取,当然如果一个参数有多个值的话,我们可以用一个返回数组的getParameterValues()。Get方法是没有一个请求的结构体的,但可以把请求的参数追加到URL的后面。Post是有请求结构体的。

当然在Servlet的Request和Respone接口中提供的不仅仅是只有doGet和doPost方法。就Requst而言有获取浏览器信息的方法: getHeader,获取与请求相关Cookie的方法: getCookies,还有一个很重要的与会话相关的getSession,还有诸如获取一些物理信息的 getServerPort,getLocalPort,getRemotePort等。我所例举的这些只是一些常用的方法,其实相关的方法还是有很多的。Response则是通过响应对象得到一个输出流,并把这个流写到HTML返回给客户,I/O输出是其最为重要的方法。响应就是为了向客户端发送数据,在发送数据之前对调用 SetContentType()方法和getWriter()方法。 SetContentType设置内容类型,只要设置了类型浏览器才会有相应的反应动作。这些内容类型都是MIME类型:通常包括了 text/html,application/pdf,video/quicktime,application/java,image/jpeg,application/jar,application/octet-stream,application/x-zip等。

在09年时,我项目组一个新成员居然还在用Servlet中的Printer方法在输出HTML。这一做法让我很是吃惊,什么年代了。HTML的输出方式已经有多种方式了,最起码也要用JSP吧!后来我才知道,他是学院派出道的程序员.....所以我们在实际的工作中,理论固然重要,最为重要的是还是要把本质的认清楚后,再去认识更高更远的东西。无论多么先进的技术,其实底层就是以前那几个常用的东东。Respone的输出通常有2种方式,一种是OutputStream,一种则是PrintWriter的方法。前者二进制流输出字节的方式,后者输出字符的方式。在响应这块还有一个用得最多的就是重新定位,是由response调用 sendRedirect方法完成。当然这里有一个和重新定位很相近,但是很容易产生混淆的叫重新分派。两者功能相当,但是作用点却不一样。重新定位是由客户端来完成的,当response调用了sendRedirect方法时,http会响应一个状态吗,还会附带一个Location的首部,这个首部便是URL的链接,浏览器得到响应后便通过Location找到URL值发生跳转,而在浏览器端的客户是会看到这种变化的。重新分派则都是在服务端完成的,由Servlet调用了 dipatcher的方法实现的,作为处在浏览器端的客户则是毫无察觉的。
                                                                       (未完待续.......)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值