servlet学习



servlet学习

servlet服务器中,请求的处理流程:首先客户端要向服务器端发送资源请求的话必须知道域名的,然后浏览器向域名服务器查询服务器的IP地址,并使用ip地址与服务器建立socket连接,相应的服务器端就启动一个线程,然后浏览器会将请求的内容发送给服务器,服务器在该线程中处理请求并将结果response给客户端浏览器,然后切断该socket连接。而服务器端的处理过程是这样的:首先服务器会完成对该请求进行完整性分析、合法性分析、请求的组装处理、身份验证等相关操作,如果是请求HTTP或者资源文件,则服务器直接读取这些文件生成response响应,并记录该访问于日志中;如果是请求servlet,则交给servlet容器进行处理,并将处理结果反馈给客户端。
servlet应用程序其实也是java程序,只不过它继承了特定的java类:httpservlet类,并且有init(),service(),destroy()方法。它运行于servlet容器中,而servlet容器又运行于jvm中。每一个这种结构的程序都是一个servlet程序,servlet程序只加载一次,并在调用destroy()方法之前一直在servlet容器中运行,当多个请求同时到来时,servlet容器会为之生成多个线程来调用该servlet的service()方法来实现并行处理(或者生成多个该servlet实例来进行并行处理)。也就是说当对一个servlet发起请求时,servlet容器会先在容器内部查找该servlet是否被加载,如果已经加载则直接构造所需参数并调用其service()方法,如果没有被加载,则先定位该servlet,然后加载并调用其service方法。
4、jsp的处理:当请求的对象是一个jsp时,web服务器会把该请求转交给jsp引擎(其实也是一个servlet,只不过它可以负责jsp的解析等一系列动作,在tomcat中是这样被定义的:在conf/web.xml中有一个名为jsp的servlet,其mapping是处理所有.jsp文件,而是用的类是jaspservlet),jsp引擎会先查找该jsp对应的servlet是否已经被加载,如果已经被加载,则像上述3中一样进行处理;如果没有被加载,则会分析该jsp文件,将其中的tag和其他jsp标记进行解析,生成相应的servlet文件,然后编译该servlet文件,最后加载该servlet。

注:1、jsp的tag的实现其实就是一段实现一定功能的java代码,为了使jsp页面变得简洁而将这些重复的java代码给抽取出来做成jsp的tag;
2、由jsp生成的servlet的文件名和jsp本身并不完全相同,但也是有一定的规律的;
3、在对jsp进行解析并生成servlet及对servlet进行编译时并不进行数据填充,而数据填充是在该servlet被加载并开始工作之后进行填充的,因为jsp和其中的tag等是被同步解析的,所以能保证数据填充的正确性。

http://blog.sina.com.cn/s/blog_6d3fcc7e01017whg.html

http://www.baidu.com/s?wd=servlet%20%E6%96%B0%E6%B5%AA%E5%8D%9A%E5%AE%A2&pn=10&oq=servlet%20%E6%96%B0%E6%B5%AA%E5%8D%9A%E5%AE%A2&tn=90562170_hao_pg&ie=utf-8&rsv_pq=9df9307d00001f04&rsv_t=8c4eui2Fjet7KKlhIWyLLViVXmkNd4LktvcXFXAHfd4VDKMBnai1HRwLwwswx6h5IeZa4qC8&rsv_page=1&f=8&rsv_bp=1