因为j2ee实在是太繁杂了,这里我只关注容器、servelt、jsp相关的内容。
当用户通过Url访问我们的网络资源的时候。有很多工作需要进行,比如判断调用哪一个servelt,调用对应servelt的service方法等等,
这些操作就都是容器来实现的。
容器是j2ee的一种组件,包括了web 容器和ejb容器,web容器主要提供了如下的功能:
- 对通讯的支持。 有了容器我们就不需要创建Socekt来跟web server进行交互了,能够更加关注于业务代码。
- 生命周期管理,管理servlet的生命周期,加载,创建,初始化,方法调用。
- 多线程的支持,给每个request创建一个线程。
- JSP的支持,能够把jsp翻译成servelt。
下面来看一下,容器是怎样处理一个请求的。
- 用户通过url访问一个servelt。
- 容器发现这个请求,于是创建两个对象HttpServeltRequest,..Response.
- 根据request中包含的url信息判断调用的servelt。然后为这个请求创建一个servelt线程,把request和response对象做为参数传入。
- 调用servelt的service方法,在根据request中的Method信息调用对应的doGet或者是doPost方法。
- 在doGet或者是doPost方法中往response中写入html
- 然后容器会把HTML信息返回给web server。然后servelt线程终止,回收request,response对象。
容器要想管理servelt首先必须得知道用户请求的是哪一个servelt。这个主要是通过在部署描述符也就是web.xml文件中定义的。
一个servelt在DD中的样子就是:
- servelt-name 部署描述名称
- servelt-class 对应的class文件
- load-on-startup 启动优先级,随服务器启动,越小优先级越高。正数才有效。
- url-pattern url访问的名字。
- 用户在客户端使用url-pattern中定义的名称,然后通过servelt-name关联找到对应的servelt。
- 使用DD而不是直接用文件的名称,能够增加灵活性,不需要在服务器中文件结构发生变化的时候通知客户端更改访问的url。还能够屏蔽服务器中的文件结构,更加的安全。
对于容器管理servelt的声明周期和解释JSP文件的表现放在servelt和JSP的中进行说明。