毕业论文范文网-论文范文
电气工程 会计论文 金融论文 国际贸易 财务管理 人力资源 学前教育 德语论文 工程管理 文化产业 工商管理 会计专业 行政管理 广告学
机械设计 汉语文学 英语论文 物流论文 电子商务 法律论文 工商管理 旅游管理 市场营销 药学论文 播音主持 人力资源 金融论文 保险学
制药工程 生物工程 包装工程 模具设计 测控专业 工业工程 教育管理 行政管理 计算机论 电子信息 市场营销 法学论文 财务管理 投资学
体育教育 小学教育 印刷工程 土木工程 书法论文 护理论文 心理学论 信息管理 公共事业 给水排水 新闻专业 摄影专业 广电编导 经济学
  • 范文首页 |
  • 毕业论文 |
  • 论文范文 |
  • 计算机论文 |
  • 外文翻译 |
  • 工作总结 |
  • 工作计划 |
  • 现成论文 |
  • 论文下载 |
  • 教学设计 |
  • 免费论文 |
  • 原创论文 |
搜索 高级搜索

原创毕业论文

当前位置:毕业论文范文网-论文范文 -> 免费论文 -> 计算机论文

web应用服务器(八)

作者: 浏览:30次
免费专业论文范文
免费专业论文
政治工作论文
计算机论文
营销专业论文
工程管理论文范文
医药医学论文范文
法律论文范文
生物专业论文
物理教学论文范文
人力资源论文范文
化学教学论文范文
电子专业论文范文
历史专业论文
电气工程论文
社会学专业论文
英语专业论文
行政管理论文范文
语文专业论文
电子商务论文范文
焊工钳工技师论文
社科文学论文
教育论文范文
数学论文范文
物流论文范文
建筑专业论文
食品专业论文
财务管理论文范文
工商管理论文范文
会计专业论文范文
专业论文格式
化工材料专业论文
英语教学专业论文
电子通信论文范文
旅游管理论文范文
环境科学专业论文
经济论文
人力资源论文范文
营销专业论文范文
财务管理论文范文
物流论文范文
财务会计论文范文
数学教育论文范文
数学与应用数学论文
电子商务论文范文
法律专业论文范文
工商管理论文范文
汉语言文学论文
计算机专业论文
教育管理论文范文
现代教育技术论文
小学教育论文范文
机械模具专业论文
报告,总结,申请书
心理学论文范文
学前教育论文范文

收费计算机专业论文范文
收费计算机专业论文
Delphi
ASP
VB
JSP
ASP.NET
VB.NET
java
VC
pb
VS
dreamweaver
c#.net
vf
VC++
计算机论文
毕业论文范文题目:web应用服务器(八),论文范文关键词:web应用服务器(八)
web应用服务器(八)毕业论文范文介绍开始:
3.2.1 JSP的预处理
JSP的预处理的作用是判断请求的JSP文件是否已经编译成了Servlet且该Servlet是否是一个有效的Servlet。如果是第一次请求该JSP,则请求JSP解析器对JSP进行解析;如果该JSP曾经被解析过,按照如下规则决定是否需要对该JSP进行重新解析和编译:
1.JSP源代码改变时,重新解析和编译页面;
2.JSP页面中包含的其它页面的源代码改变时,重新解析和编译页面;
3.内存中代表该JSP的Servlet对象不存在时,重新解析和编译页面;
4.原来生成的Servlet类不再存在时,重新解析和编译页面;
5.除去以上四种情况,不再重新解析和编译页面。
对JSP的进行预处理对于提高服务器的响应性能具有重要意义。因为如果一个JSP从未改变,如果每次请求该JSP时,JSP引擎均重新解析和编译该JSP,不仅浪费系统资源,而且延长了对客户端的响应时间。
3.2.2解析JSP
JSP文件的解析是JSP引擎工作的核心。一个JSP页面由静态数据和动态数据组成,动态数据已经是Java代码,所以它们不必修改就可以使用,动态数据被顺序放进生成的Servlet的_jspService方法中。静态数据嵌入到_jspService方法中的javax.servlet.jsp.JspWriter实例的write方法中。
解析JSP的过程实际上就是对JSP源代码解析后,按照JSP规范组合成一个Servlet源文件的过程。
JSP引擎使用JspReader、JspParser、ServletWriter等几个类来实现对JSP文件的解析。
class JspReader{
int read();
void unread(int c);
void setLineNumber(int lineNumber);
int getLineNumber();
}
JspReader是对java.io包中的PushbackReader和LineNumberReader的封装,具有读出(read)或回退(unread)单个字符和字符数组以及定位当前JSP文件行数的功能。
class JspParser{
Document parse();
Node addTag();
Node addIncludeDirective();
Node addScriptlet();
Node addExpression();
Node addText();
}
JspParser预先定义一组JSP的标准标签,并调用JspReader来读取JSP文件内容,根据JSP的标准标签,将读出的文件内容封装成一个XML Document对象。
class ServletWriter{
void writePageBegin();
void writeDeclaration();
void writeJspServiceBegin();
void writeImplicitObjects();
void writeMainSection();
void writeJspServiceEnd();
void writePageEnd();
}
ServletWriter根据生成的XML Document对象并结合JSP规范生成一个Servlet源文件。
3.2.3编译JSP
生成的Servlet只有编译成Java类才能够被Servlet容器所调用。我们使用优秀的开源程序ant来完成生成的Servlet类的编译。JSP引擎通过该JSP文件所在的应用程序上下文获取当前的类装载器,类装载器为ant初始化编译所需的类路径,调用ant进行编译。如果编译失败,JSP引擎直接向客户端返回错误信息,否则,使用类装载器将编译后的Servlet类装载进内存并实例化,交给Servlet容器进行处理。编译器可供用户选择,当前我们提供javac和jikes两种编译器来编译JSP。
3.2.4 JSP的生命周期
一个将JSP文件编译后的Servlet类包括6个主要的方法:init、destroy、service、jspInit、jspDestroy、_jspService。前三个方法继承自HttpServlet,后三个方法继承自HttpJspPage。后三个方法由JSP引擎在解析JSP文件的过程中自动生成,并对Servlet容器透明,它们是生成的Servlet类的核心。基本关系是init调用jspInit,destroy调用jspDestroy,service调用_jspService,因此Servlet容器通过init、destroy、service即可完成对由JSP生成的Servlet的调用。
JSP页面第一次被请求时,JSP引擎按照前面所述三个步骤创建JSP页面代表的Servlet实例,Servlet容器调用该实例的init方法从而间接地调用jspInit,jspInit方法只被运行一次,Servlet容器保证在任何请求被处理前处理完jspInit。与jspInit类似,jspDestroy也只在Servlet从JVM卸载时由Servlet容器通过destroy方法调用。Servlet容器调用_jspService方法处理请求并对客户端做出回复。JSP引擎只在第一次请求某JSP页面时创建一个Servlet,以后的请求只是重用第一个请求所创建的Servlet。
3.3 Servlet容器
Servlet容器是DM WAS的核心部分,它基于HTTP协议并提供请求和响应等网络服务。Servlet容器主要通过Servlet的生命周期来管理Servlet,包括初始化、执行和销毁Servlet。
3.3.1请求和响应
客户端和服务器之间的交互过程实质上就是一个请求和响应的过程。Servlet容器封装了这一过程的细节,以一个DMRequest对象代表客户端的一个请求,以一个DMResponse对象代表对客户端的一个响应。DMRequest和DMResponse分别实现了HttpServletRequest和HttpServletResponse接口。
DMRequest封装了Socket的输入流,负责读取并存储HTTP请求头和消息体,同时提供标准接口供应用程序访问和修改这些头信息。
DMResponse封装了Socket的输出流,它通过向HTTP响应头和消息体中写入被请求的内容而对客户端做出响应。DMResponse内部维持一个字节缓冲区,用于缓存输出的内容。一旦缓冲区已满,容器就将缓冲区中的内容发送到客户端,并将缓冲区清空。DMResponse默认的缓冲区大小为1024字节,应用程序可根据需要进行调整,但必须调整适当。缓冲区大,则向客户端做出响应的间隔时间长,减少服务器的负担;缓冲区小,则客户端获得响应的速度快,但增加了服务器内存的消耗。应用程序也可以通过flushBuffer方法强制服务器将缓冲区中的内容输出到客户端。
与DMRequest类似,DMResponse也提供一些标准接口供应用程序在响应完成前对HTTP头信息进行访问和修改,以满足应用程序定制响应的需求。
DMRequest和DMResponse对象是服务器通过被请求的Servlet的service方法暴漏给应用程序的。它们的生命周期只存在于此次service方法的执行过程中。
3.3.2应用程序上下文
每一个应用程序隶属于一个应用程序上下文,Servlet容器按照应用程序上下文对应用程序进行管理。DM Servlet容器遵从Servlet的生命周期规律来实现。Servlet的生命周期由DMServletContext来管理。一个DMServletContext实例代表一个应用程序上下文,在服务器中部署了多少应用程序,则容器中就存在多少DMServletContext实例。DMServletContext实例化是在服务器启动时由上下文管理器(ContextManager)来实现的。上下文管理器在服务器启动时负责装载所有部署在服务器中的应用程序。它实例化所有上下文,以及启动特定于每个上下文的服务,如创建上下文的Web类装载器、调用XML组件解析Web描述符、创建上下文的安全域、绑定对应于该上下文的命名服务。当一个应用程序上下文实例化且相关服务启动后,它就可以服务于对部署在其中的Servlet的请求。
按照Servlet规范,一个Servlet具有一定的生命周期,这个生命周期由javax.servlet.Servlet接口的init,service和destroy方法表达。Servlet只需被服务器加载一次并且常驻内存。DM Servlet容器按照Servlet的生命周期来管理容器中的Servlet。
容器维持一个Servlet缓冲池。当客户端向服务器请求某个Servlet服务时,容器首先在Servlet缓冲池中查找是否有所请求的Servlet实例,如果有,直接取出并调用该Servlet的service方法服务于客户端;如果没有,表明该Servlet是被第一次请求,容器调用当前上下文的Web类装载器将请求的Servlet类装载进内存并实例化。Servlet加载并实例化后,容器对该Servlet进行初始化。初始化的过程主要是读取Servlet的配置信息、系统资源(例如JDBC连接)以及其它仅仅需要执行一次的任务。通过调用它的init方法并给它传递唯一的一个DMServletConfig对象完成这个过程。DMServletConfig实现了ServletConfig接口,它封装了Servlet的一些初始化参数。DMServletConfig对象同时给Servlet提供了访问实现了ServletContext接口的DMServletContext对象的方法,从而使得该Servlet能够访问ServletContext定义的一切公共接口。init方法在Servlet生命周期过程中仅被调用一次。在初始化期间,Servlet实例可能通过抛出UnavailableException或者ServletException异常表明它不能进行有效服务。如果一个Servlet抛出一个这样的异常,它将不会被置入有效服务并且容器立即将其释放并向客户端返回错误。如果Servlet初始化正常,容器将该Servlet放入缓冲池,同时将DMRequest和DMResponse对象传给Servlet的service方法并执行。同样,如果在执行过程中发生异常,容器直接向客户端返回错误。
在Servlet的执行过程中,需要注意一个多线程和持久性的问题。因为Servlet只被创建一次,然后作为不变的实例一直运行,所以在Servlet中可以创建持久的变量和对象。同一Servlet的所有线程共享这些持久的变量和对象。这样就会带来一个问题—线程竞赛。发生线程竞赛的情况是:一个线程正准备私用数据,而第二个线程在第一个线程使用完数据前修改了此数据。
Servlet API提供了SingleThreadModel接口解决了这个问题。开发者如果想防止线程竞赛问题,他可以将其编写的Servlet实现SingleThreadModel接口。容器保证在调用实现了SingleThreadModel接口的Servlet的service方法时只会让一个线程执行并且一次性执行完,其它相同请求的线程只能等待。
Servlet规范没有规定容器要将一个加载的Servlet保存多长时间,显然将一个初始化的Servlet永久保存在缓冲池中是不可取的。DM Servlet容器会按照最近最少使用算法(Least Recently Used,LRU)定期清理Servlet缓冲池中的Servlet,对于很久未使用的Servlet,容器调用它的destroy方法并将其移除以便它能够被垃圾回收。
Servlet缓冲池LRUCache按如下算法实现。
1.用一个缓冲对象CacheObject对Servlet实例进行包装,CacheObject由两
个变量组成,一个是代表Servlet实例的对象变量,一个是代表每次访问该Servlet实例的时间变量。
2.LRUCache的主要方法是put方法和get方法,其内部用一个哈希表和一个有向链表实现缓冲,用一个后台守护线程定期清理最近很久未使用的Servlet对象。
哈希表存储Servlet实例的类名和将该Servlet实例进行包装的CacheObject的名—值对,有向链表存储Servlet实例的类名。具体实现见算法3.1、算法3.2以及算法3.3。


3.3.3 Servlet过滤器


首页 上一页 5 6 7 8 9 下一页 尾页 8/9/9


以上为本篇毕业论文范文web应用服务器(八)的介绍部分。
本论文在计算机论文栏目,由论文网(www.zjwd.net)整理,更多论文,请点论文范文查找

毕业论文降重 相关论文

收费专业论文范文
收费专业论文
汉语言文学论文
物理学论文
自动化专业论文
测控技术专业论文
历史学专业论文
机械模具专业论文
金融专业论文
电子通信专业论文
材料科学专业论文
英语专业论文
会计专业论文
行政管理专业论文
财务管理专业论文
电子商务国贸专业
法律专业论文
教育技术学专业论文
物流专业论文
人力资源专业论文
生物工程专业论文
市场营销专业论文
土木工程专业论文
化学工程专业论文
文化产业管理论文
工商管理专业论文
护理专业论文
数学教育专业论文
数学与应用数学专业
心理学专业论文
信息管理专业论文
工程管理专业论文
工业工程专业论文
制药工程专业论文
电子机电信息论文
现代教育技术专业
新闻专业论文
艺术设计专业论文
采矿专业论文
环境工程专业论文
西班牙语专业论文
热能与动力设计论文
工程力学专业论文
酒店管理专业论文
安全管理专业论文
交通工程专业论文
体育教育专业论文
教育管理专业论文
日语专业论文
德语专业论文
理工科专业论文
轻化工程专业论文
社会工作专业论文
乡镇企业管理
给水排水专业
服装设计专业论文
电视制片管理专业
旅游管理专业论文
物业管理专业论文
信息管理专业论文
包装工程专业论文
印刷工程专业论文
动画专业论文
环境艺术专业论文
信息计算科学专业
物流专业论文范文
人力资源论文范文
营销专业论文范文
工商管理论文范文
汉语言文学论文范文
法律专业论文范文
教育管理论文范文
小学教育论文范文
学前教育论文范文
财务会计论文范文

电子商务论文范文

上一篇:基于JAVA的酒店管理系统设计与实现 下一篇:数据库设计教材管理系统

最新论文

精品推荐

毕业论文排版

热门论文


本站简介 | 联系方式 | 论文改重 | 免费获取 | 论文交换

本站部分论文来自网络,如发现侵犯了您的权益,请联系指出,本站及时确认删除 E-mail:229120615@qq.com

毕业论文范文-论文范文-论文同学网(www.zjwd.net)提供计算机论文毕业论文,毕业论文范文,毕业设计,论文范文,毕业设计格式范文,论文格式范文

Copyright@ 2010-2024 zjwd.net 毕业论文范文-论文范文-论文同学网 版权所有