Servlet规范简介.doc_第1页
Servlet规范简介.doc_第2页
Servlet规范简介.doc_第3页
Servlet规范简介.doc_第4页
Servlet规范简介.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Servlet规范简介web框架是如何注入到Servlet中的引言Web框架一般是通过一个Servlet提供统一的请求入口,将指定的资源映射到这个servlet,在这个servlet中进行框架的初始化配置,访问Web页面中的数据,进行逻辑处理后,将结果数据与的表现层相融合并展现给用户。WEB框架想要在符合Servlet规范的容器中运行,同样也要符合Servlet规范。将一个WEB框架注入到一个servlet中,主要涉及到Servlet规范中以下部分: 部署描述符 映射请求到Servlet Servlet生存周期 请求分发 Servlet相关技术规范简介部署描述符部署描述符就是位于WEB应用程序的/WEB-INF目录下的web.xml的XML文件,是WEB应用程序不可分割的部分,管理着WEB应用程序的配置。部署描述符在应用程序开发人员,应用程序组装人员,应用程序部署人员之间传递WEB应用程序的元素和配置信息。在WEB应用程序的部署描描述符中以下类型的配置和部署信息是所有的servlet容器必须支持的: ServletContext初始化参数 Session配置 Servlet声明 Servlet映射 应用程序生存周期监听器 Filter的定义和映射 MIME类型的映射 欢迎文件列表 错误文件列表出现在部署描述符中的安全信息可以不被支持,除非这个Servlet容器是J2EE规范实现的一部分。所有正确的WEB应用程序部署描述符(Servlet2.3规范)必须包含下面的DOCTYPE声明:下面说明在部署描述符中是如何进行Servlet声明和映射的,这个DTD的全部内容可以在下面这个地址获得:/dtd/web-app_2_3.dtd在这个DTD中有关Servlet声明和映射和映射的部分如下:根据以上DTD,一个典型的Servlet的声明的格式如下:catalogcom.mycorp.CatalogServletcatalogSpring一个典型的Servlet映射如下:catalog/catalog/*通过上面的方法,我们就声明了一个名称为catalog的Servlet,它的实现类为com.mycorp.CatalogServlet,并且带有一个catalog参数,参数值为Spring,所有向/catalog/*的请求都被映射到名称为catalog的Servlet。映射请求到Servlet接收到一个请求后,WEB容器要确定转到哪一个WEB应用程序。被选择的应用程序的最长的上下文路径必须和请求的URL开始部分匹配。URL匹配的部分是映射到Servlet的上下文路径。WEB容器下一步必须按照下面的程序定位处理请求的Servlet。用来映射到Servlet的路径是请求对象的URL减去上下文的路径。下面的URL路径映射规则按顺序执行,容器选择第一个成功的匹配并且不在进行下一个匹配: 容器试着对请求的路径和Servlet的路径进行精确匹配,如果匹配成功则选择这个Servlet。 容器会循环的去试着匹配最长的路径前缀:把/当作路径分隔符,按照路径树逐级递减的完成,选择最长匹配的Servlet。 如果这个URL路径的最后有扩展名(比如.jsp),Servlet容器会试着匹配处理这个扩展名的Servlet。 如果前面的没有与前面三条规则相匹配的Servlet,容器会试着为资源请求提供适当的资源,如果有“默认”的Servlet定义给这个应用程序,那么这个Servlet会被使用。容器必须使用一个大小写敏感的匹配方式。在部署描述符中,用下面的语法定义映射: 一个以/开始并且以/*结束的字符串用来映射路径。 一个以*.为前缀的字符串用来映射扩展名。 一个只包含/的字符串指示着这个应用程序“默认”的Servlet,在这种情况下,servlet的路径是请求的URI减去上下文路径,并且这个路径是null。 所有其他的字符只用来精确匹配。如果容器内置JSP容器,那么*.jsp被映射到这个容器,并允许JSP页面在需要的时候被执行。这种映射叫做隐含映射。如果WEB应用程序中定义了*.jsp的映射,那么这个映射有比隐含映射高的优先级。WEB容器允许显式的声明隐含映射以获得优先级,例如,*.shtml的隐含映射可以在服务器上被映射为包含功能。映射实例:path patternservlet/foo/bar/*servlet1/baz/*servlet2/catalogservlet3*.bopservlet4下面是实际请求映射的结果incoming pathservlet handling request/foo/bar/index.htmlservlet1/foo/bar/index.bopservlet1/bazservlet2/baz/index.htmlservlet2/catalogservlet3/catalog/index.html“default” servlet/catalog/racecar.bop servlet4/index.bopservlet4请注意/catalog/index.html 和/catalog/racecar.bop这两种情况,因为是精确匹配,所以并没有映射到处理/catalog的servlet。Servlet生存周期在介绍Servlet的生存周期之前需要先介绍一下javax.servlet.Servlet接口。所有的Servlet必须实现或者间接实现这个借口,我们通常可以通过继承javax.servlet.GenericServlet或者javax.servlet.http.HttpServlet.类来实现这个接口。这个接口中定义了下面5种方法:public void init(ServletConfig config);public ServletConfig getServletConfig();public void service(ServletRequest req, ServletResponse res);public String getServletInfo();public void destroy() ;init()方法init方法在容器器装入Servlet 时执行,Servlet容器在实例化后只调用一次init方法, init方法必须在servlet接收到任何请求之前完成。这个方法通常用来进行一些资源的管理和初始化,如从配置文件读取配置数据,读取初始化参数,初始化缓冲迟等一次性的操作。getServletConfig()方法GetServletConfig方法返回一个 ServletConfig 对象,该对象用来返回这个Servlet的初始化信息和启动参数。返回的是传递到init方法ServletConfig。Service()方法Service方法是应用程序逻辑的进入点,是servlet方法的核心,WEB容器调用这个方法来响应进入的请求,只有servlet成功被init()方法初始化后,Service方法才会被调用。getServletInfo()方法这个方法返回一个字符串对象,提供有关servlet 的信息,如作者、版本等。destroy()方法destroy方法在容器移除Servlet 时执行,同样只执行一次。这个方法会在所有的线程的service()方法执行完成或者超时后执行,调用这个方法后,容器不会再调用这个servlet的方法,也就是说容器不再把请求发送给这个Servlet。这个方法给servlet释放占用的资源的机会,通常用来执行一些清理任务。这个接口定义了初始化一个servlet,服务请求和从容器中移除servlet的方法。他们按照下面的顺序执行:1. servlet被实例化后,用init方法进行初始化2. 客户端的任何请求都调用service方法3. servlet被移除服务,调用destroy方法销毁servlet的生存周期如下图: 请求分发请求分发可以让一个Servlet把请求分配到另外一个资源,RequestDispatcher接口提供了实现他的机制。可以通过下面两种方式从ServletContext中获得一个实现了RequestDispatcher接口的对象: getRequestDispatcher getNamedDispatchergetRequestDispatcher方法接受一个指向目标资源的URL路径RequestDispatcher rd = getServletContext().getRequestDispatcher(“/catalog”);getNamedDispatcher方法接受一个Servlet名称参数,这个名称是在部署描述符中元素指定的那个名称。RequestDispatcher rd = getServletContext().getNamedDispatcher (“catalog”);RequestDispatcher接口有两个方法,允许你在调用的servlet完成初步处理后把请求响应分配到另外一个资源,forward()方法:public void forward(ServletRequest request, ServletReponse reponse) throws SwerletException,IOExceptionforward方法上让你把请求转发到另外的Servlet或者jsp或者html等资源,由这个资源接下来负责响应。如:RequestDispatcher rd = getServletContext().getRequestDispatcher(“/catalog”);rd. forward(request,response);include()方法:public void include (ServletRequest request, ServletReponse reponse) throws SwerletException,IOExceptioninclude方法让你的Servlet响应中包含另外一个资源生成内容RequestDispatcher rd = getServletContext().getRequestDispatcher(“/catalog”);rd. include(request,response);结合WebWork的具体分析WebWork是由OpenSymphony组织开发实现MVC模式的J2EE Web框架。在介绍完servlet规范的相关内容后,我们看看WebWork是如何注入到一个Servlet中的,假设我们有一个上下文环境为“/WebWorkdDemo”的WEB应用。部署描述符在部署描述符中,我们需要进行如下配置:webworkcom.opensymphony.webwork.dispatcher.ServletDispatcherwebwork*.action我们声明了一个名为webwork的Servlet和*.action到这个Servlet的映射,这个Servlet就是webwork中的controller,担任MVC框架中非常重要的控制器角色。映射请求到Servlet在XWork的配置文件xwork.xml中有如下片段:/demo.jsp这样我们由h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论