Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

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

$
0
0

                              25--认识Web容器

03年转到JAVA开发,开始编写基于企业内网的WEB应用。那时候对于JAVA这门语言还是感觉不难,对于WEB应用的开发还是感觉有些无从下手的方式。也许之前熟悉了像DELPHI这种强大RAD工具,所以面对另一种开发形式真有那么点无从下手的感觉。但是万事万物都是缘由的,顺着WEB(JAVA)的源头一直往上走,你就发现有一个很重要的东西,尽管03年各类JAVA的应用框架铺天盖地而来,但是本质上都是围绕着它来作的文章,这个东东便是Servlet。

 

当然在了解Servlet之前,你还是对WEB应用的方式作一个清晰的了解,对于HTTP协议及HTML要有一个大概的了解。因为WEB应用的调用和这些都息息相关,原理搞清楚了Servlet明白了,以后对于任何的WEB框架你总能够透过形式找到最为本质的内容。首先浏览器你可以理解为C/S中的一个Client端,输入的url串就是向Web服务端请求的资源,WEB服务端获取请求资源就寻找资源找到了就返回给你,找不到的就返回错误。客户端与服务端之间的会话都是以HTTP的协议来完成的,该协议能够支持简单的请求和响应。HTML众所周知就是超文本传输协议,关于HTML我会在单独的章节去介绍。HTML主要是负责向客户显示相关的内容,服务端和客户端之间就是以HTTP协议为传输纽带以HTML为载体传送的。HTTP是TCP的上层协议,具有WEB特性依赖TCP/IP进行传输,HTTP的会话结构是一个请求/响应的序列。一般请求的内容为:HTTP方法、URL、表单参数;请求的方法在HTTP中一般分为GET和POST方法。GET方法,你可以理解为像服务端请求获取的页面,一般Get方法会把请求追加到URL后面。POST方法则是为服务器提供用户往表单插入的信息,POST请求将表单数据放在请求体内;一般响应的内容为状态码、内容类型我们通常叫作MIME类型、内容。所以从响应的内容来看,HTML也是响应的一部分它也是HTTP响应数据的一部分。

 

而这一切的完成,都需要在一个容器的地方完成的。这个容器便是Servlet的容身之所!在这合格容器里,Servlet会完成自己的生命周期:加载、实例化、调用init、调用service方法、调用Destory方法从而结束自己的一生。Servlet没有受控的main方法,所以它必须受控于另一个JAVA的应用,这个应用就是容器就是我们使用过的Tomcat,Weblogic等。好了,当服务器接受到一个客户端的请求,首先会把这个请求交给容器,通过容器的部署去交给处理的Servlet,这里面就包括了http的请求和响应。容器会根据url请求找到正确的Servlet,同时创建一个线程,并把这个响应和请求的对象赋予给这个线程。其实Servlet就相当于容器里的一个线程,一起的管理都交给了容器。容器为交互提供通信支持,为Servlet提供生命周期管理,容器理所当然的支持多线程方式这也是容器生存的必要条件,WEB容器大多都是通过XML文件来部署的,所以它也提供了一种管理和修改安全的配置。

 

容器处理请求大概有几个这样的过程:当容器接收到一个http请求时,当请求是需要一个Servlet时,容器会创建HttpServletRequest和HttpServletRespone两个对象。当容器根据请求的URL找到对应的Servlet并为这个Servlet创建一个线程并吧响应HttpServletRequest和HttpServletRespone赋予给它处理。容器会调用Servlet的Service方法进行,如果是Get则调用doGet,如果是Post则调用doPost。doGet方法会把生成的页面信息放到HttpServletRespone对象里,当响应结束时响应对象会转成http的一个响应返回给客户端,这时候请求对象和响应对象也是到了over的时候了。

                                                              (未完待续.....)

作者:chilavert318 发表于2013-6-8 8:27:57 原文链接
阅读:23 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>