`
lhx1026
  • 浏览: 307137 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Java Servlet学习(二)

 
阅读更多

一、javax.servlet.ServletConfig接口

 

javax.servlet.ServletConfig接口是servlet的配置对象,这个servlet的配置对象被servlet容器用来在初始化时传递信息给servlet。该接口能够传递的信息可以从该接口定义的方法中看到:

 

  • public String getServletName()——该方法返回servlet实例的名称。这个名称可以通过分配在web应用部署描述符中的服务器管理来提供。而对于没有注册的servlet实例来说,servlet的名称则是servlet的类名。
  • public ServletContext getServletContext() ——该方法返回调用者正在实际执行的ServletContext对象的引用。
  • public String getInitParameter(String name)——该方法通过传递过来的参数名称获得初始化参数中该名称的值,如果该初始化参数不存在,则返回null。
  • public Enumeration getInitParameterNames()——该方法返回servlet初始化参数的名称列表,这个名称列表是一个String对象的Enumeration类。如果servlet没有初始化参数,则返回一个空的Enumeration类。

二、javax.servlet.ServletContext接口

 

javax.servlet.ServletContext接口定义了一系列servlet用来和它的servlet容器进行沟通的方法,比如,获得一个文件的MIME类型,分派请求或者编写一个log文件。

 

在这里,是一个context对应每个JVM每个web应用(一个web应用是一批servlet和安装在指定服务器的URL命名空间下的子集的内容,比如/catalog,以及通过.war文件安装的内容)

 

而在一个web应用在它的部署描述符中被标记为"分布式的"的情况下,则每个虚拟机会有一个context实例。在这种情况下,context不能作为一个共享全局信息的位置(因为这些信息不可能为全局的)。这个时候就要使用外部资源代替了比如使用数据库代替。

 

ServletContext对象包含在ServletConfig对象中,ServletConfig对象在servlet被初始化时,由web服务器生成的servlet提供。

 

该接口的方法如下所示:

 

  • public String getContextPath() ——返回web应用的上下文(context)路径。

    这个context路径是请求的URI的一部分,这个URI使用来选择请求的context。这个context路径通常来自第一个请求的URI。这个路径以"/"字符开头,但是不会以”/“字符结尾。对于在默认的(根)的context中servlet来说这个方法返回的是""。

    有可能的情况是,servlet容器有可能是多于一个context路径可以匹配一个context。在这种情况下,javax.servlet.http.HttpServletRequest.getContextPath()方法会返回被这个请求使用的实际的context路径,而这个方法返回的路径有可能和实际的context路径有点不同。这个方法返回的context路径最好被认为是应用最主要的或者是优先的context路径。
  • public ServletContext getContext(String uripath) ——返回一个与所在服务器上的指定的URL相关联的ServletContext对象。

    这个方法允许servlet获得访问服务器各个部分的context的权限,并且在需要的时候从context中获得RequestDispatcher 对象。给定的路径必须是以”/“开头的,它是相对于服务器的文档的根路径来说的,并且匹配在这个容器上的其他web应用的contexxt的根。

    在一个有安全意识的环境中,servlet容器可能会对给定的URL返回null。
  • public int getMajorVersion()——返回这个servlet容器支持的Java Servlet API的主版本号。所有符合2.5版本的实现中,这个方法必须返回整数2。
  • public int getMinorVersion()——返回这个servlet容器支持的Java Servlet API的小版本号。所有符合2.5版本的实现中,这个方法必须返回整数5。
  • public String getMimeType(String file) ——返回指定文件的MIME类型,如果不知道这个文件的MIME类型则返回null。MIME类型是由servlet容器的配置决定的。并且有可能是在web应用中的部署描述中指定的。一般MIME类型会是"text/html" 和"image/gif"。
  • public Set getResourcePaths(String path) ——返回一个类似于目录的在web引用中所有资源的路径的列表。这些web应用中最长的子路径匹配传进来的path参数。路径表明是以一个'/'结束的子目录路径。返回的路径是相对于web应用程序的根路径的,并且以’/‘开头的。比如,如果一个web应用包含了:

    /welcome.html
    /catalog/index.html
    /catalog/products.html
    /catalog/offers/books.html
    /catalog/offers/music.html
    /customer/login.jsp
    /WEB-INF/web.xml
    /WEB-INF/classes/com.acme.OrderServlet.class,

    getResourcePaths("/")则返回{"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"}
    getResourcePaths("/catalog/") 返回{"/catalog/index.html", "/catalog/products.html", "/catalog/offers/"}.
  • public URL getResource(String path) throws MalformedURLException ——返回与指定的路径相对应的资源的URL。这个路径必须以'/'开头,并且是相对于当前context根路径的。

    这个方法允许servlet容器标记一个资源对于任意源servlet是否可用。资源可以是在本地或者远程文件系统中的,比如在数据库中或者是.war文件中的。

    servlet必须实现URL处理器和URLConnection对象。这些URL处理器和URLConnection对象必须可以访问资源的。

    如果没有资源和给定的pathname相对应,则这个方法返回null。

    某些容器可能允许通过URL类的方法编写这个方法返回的URL。

    资源的内容会被直接返回,因此一旦请求一个a.jsp页面,则返回JSP的源代码。使用一个RequestDispatcher来包含执行的结果。

    这个方法和java.lang.Class.getResource()方法相比有不同的目的。java.lang.Class.getResource()方法是在类加载器中查找资源,而这个方法却不使用类加载器。
  • public InputStream getResourceAsStream(String path) ——将位于指定路径的资源作为一个InputStream对象来返回。

    在InputStream对象中的数据可以是任意长度或者类型的。这个路径必须根据在getResource()方法中的规则来指定。如果在指定的路径中没有资源存在则返回null。

    通过getResource()方法得到的可用的Meta信息(比如content length和content type)使用getResourceAsStream(String path)方法时,这些Meta信息是丢失的。

    servlet必须实现URL处理器和URLConnection对象。这些URL处理器和URLConnection对象必须可以访问资源的。

    这个方法和java.lang.Class.getResourceAsStream方法不同,java.lang.Class.getResourceAsStream使用了类加载器。而这个方法允许servlet容器标记对于任何位置的servlet来说这个资源是否可用,并且不使用类加载器。
  • public RequestDispatcher getRequestDispatcher(String path) ——返回一个位于指定路径的作为资源包装器的RequestDispatcher对象。一个RequestDispatcher可以被用来将一个请求转发给一个资源或者在reponse中包含这个资源。这个资源可以是动态或者静态的:

    路径名必须以'/'开头,并且是相对于当前context的根路径的。使用getContext方法获得外部context的资源的RequestDispatcher。如果ServletContext无法返回一个RequestDispatcher则返回null。
  • public RequestDispatcher getNamedDispatcher(String name)——返回已经给定名称的servlet的作为封装器的RequestDispatcher对象。

    Servlets (JSP页面也一样)可能通过服务管理器或者通过web应用的部署描述被命名。一个servlet实例可以使用ServletConfig.getServletName()方法来决定这个servlet的名称。

    如果ServletContext因为任何原因而无法返回RequestDispatcher则这个方法返回null。
  • public String getRealPath(String path) ——返回一个包含了给定的虚拟路径的绝对路径的字符串。比如,通过请求http://host/contextPath/index.html,会返回路径"/index.html"在服务器文件系统上的绝对文件路径。而这个contextPath则是ServletContext中的context路径。

    返回的绝对路径会以适合这个servlet正在运行的计算机和操作系统的格式来返回,并且包含了合适的路径分隔符。如果servlet容器因为任何原因(比如当内容正在被生成一个.war文件时)无法传输虚拟路径到真实路径,则这个方法返回null。
  • public String getServerInfo()——返回servlet正在运行的servlet容器的名称和版本号。

    返回的string格式是“服务器名/版本号”。比如JavaServer Web Development Kit可能返回的string是“JavaServer Web Dev Kit/1.0”。

    servlet容器可能在主要的string之后在圆括号中返回其他可选的信息。比如,JavaServer Web Dev Kit/1.0 (JDK 1.1.6; Windows NT 4.0 x86)。
  • public String getInitParameter(String name)——返回一个根据给定的名称的context范围的初始化参数对应的值,如果这个给定名称的参数不存在,则返回null。

    这个方法对于条目“web application”可以配置有用的信息。比如它可以提供一个网站管理员的email地址或者系统临时保持住的数据的名称。
  • public Object getAttribute(String name) ——通过给定的名称获得servlet容器中的属性,如果这个给定名称在servlet容器中没有对应的属性值,则返回null。属性允许servlet容器给servelt增加额外的不是由这个接口提供的信息。可以查看你的服务器文档中有关于它的属性的信息。可以通过getAttributeNames()方法获得它所支持的属性列表。

    这个属性返回的是java.lang.Object或者是它的子类对象。属性名称最好遵循一些约定,比如包名。java servlet 的api规范预留的名称匹配java.*,javax.*以及sun.*。
  • public Enumeration getAttributeNames() ——返回包含了在这个servlet context中的属性名的枚举列表。使用getAttribute方法以及一个给定的属性名可以获得这个属性的值。
  • public void setAttribute(String name, Object object) ——在servlet context中给一个指定的属性名绑定对象。如果指定的属性已经存在,则会给这个属性设置新的属性值。

    如果在ServletContext中配置了监听器,则容器会相应的提醒它们。

    如果传过来的值是null,则调用这个方法的效果则是相当于调用removeAttribute()。

    属性名最好遵循包名的规定。Java Servlet API的规范预留的名称匹配java.*,javax.*以及sun.*。
  • public String getServletContextName()——返回和在部署描述符中对应的web应用的名称。在web应用的部署描述符是通过display-name元素描述的。

三、javax.servlet.RequestDispatcher接口

 

定义一个接受客户端请求的对象,并且将这些请求发送给服务器上的任意资源(比如一个servelt,HTML文件或者JSP文件)。servlet容器创造了RequestDispatcher对象,这个对象被用来包装位于指定路径或者指定名称的服务器资源。

这个接口是打算作为wrap servlet的,但是一个servlet容器可以创造一个RequestDispatcher对象来包装任意类型的资源。

 

定义的方法如下所示:

 

  • public void forward(ServletRequest request, ServletResponse response)throws ServletException, IOException ——转发一个servlet的请求给服务器上另外的资源(servlet,JSP文件或者HTML文件)。这个方法允许一个servlet对一个请求和资源做预处理,并且生成响应(response)。

    作为通过getRequestDispatcher()方法获得的RequestDispatcher对象而言,ServletRequest对象有它自己的路径元素和调整的参数来匹配目标资源的路径。

    forward()方法在被调用之前必须将response委托给客户端(在resopnse body输出被刷新之前)。如果response已经被委托了,则forward()方法会抛出IllegalStateException的异常。在response缓存中没有被委托的输出会被forward之前被自动清空。

    请求和response参数必须要么是同一个对象作为传递到调用的servelt的service方法的参数,要么是ServletRequestWrapper类的子类或者封装了它们的ServletResponseWrapper类。
  • public void include(ServletRequest request, ServletResponse response)
        throws ServletException, IOException
    ——包含了response中的资源(servlet,JSP页面,HTML文件)的内容。实际上,这个方法开启了编程性的服务端包含。

    ServletResponse对象有它自己的路径元素和依然没有调用者修改的参数。被包含的servlet无法修改response的status code或者设置header,任何尝试的修改都会被忽略。

    请求和response参数必须要么是同一个对象作为传递到调用的servelt的service方法的参数,要么是ServletRequestWrapper类的子类或者封装了它们的ServletResponseWrapper类。
分享到:
评论

相关推荐

    java Servlet学习笔记

    Java Servlet是Java编程语言中用于处理Web服务器与客户端交互的一种技术,主要应用于构建动态Web应用程序。Servlet是Java EE(企业版)的一部分,它允许开发者在服务器端创建强大的、可扩展的网络应用程序。以下是对...

    Java Servlet 学习课件

    Java Servlet 是一种基于Java的服务器端编程技术,用于构建动态Web应用。...Servlet是Java 2平台的重要组成部分,旨在替代CGI...通过学习和掌握Servlet技术,开发者可以构建出复杂的企业级应用系统,满足各种业务需求。

    java-servlet学习笔记

    在本篇学习笔记中,我们将深入探讨与Java Servlet相关的知识点,包括其工作原理、生命周期、配置以及实际应用。 首先,了解Servlet的工作原理至关重要。当一个HTTP请求到达服务器,Web容器(如Tomcat)会识别请求的...

    深入学习:Java Servlet开发与实例

    本教程“深入学习:Java Servlet开发与实例”旨在帮助Java从业者深入理解Servlet技术,并通过实例进行实践,提升开发能力。 Servlet是Java平台上的一个标准API,定义了如何在服务器端处理HTTP请求和响应。它为...

    Servlet学习笔记(java的Servlet)

    Servlet学习笔记(java的Servlet)。 jsp的学习基础。此笔记可让你5天内学会使用Servlet,可快速入门,也可当手册使用。 更多:http://download.csdn.net/user/daillo/all

    java servlet jar包

    Java Servlet是Java编程语言中用于开发服务器端应用程序的API,主要用于构建动态Web应用程序...同时,Servlet也是学习JSP、Spring MVC等高级框架的基础,因此对Java Servlet的理解和熟练使用是提升开发技能的关键一步。

    深入 Java Servlet 网络编程

    二、Servlet API 2.1 ServletConfig 和 ServletContext:ServletConfig 对象存储了Servlet的初始化参数,ServletContext 则代表整个Web应用的共享环境,可用于全局信息交换。 2.2 HttpServletRequest 和 ...

    java servlet 中文说明手册

    java servlet 中文说明手册,适合新手学习java servlet

    JAVA SERVLET 高级编程

    通过深入学习和掌握这些高级Java Servlet主题,开发者能够构建更高效、可扩展的Web应用程序,同时为用户提供流畅的交互体验。结合实际项目经验,不断探索和实践,将是提升Java Web开发技能的关键。

    学习java servlet jsp jdk的所有帮助

    Java Servlet、JSP(JavaServer Pages)和JDK(Java Development Kit)是Java Web开发中的核心技术,对于构建动态Web应用程序至关重要。以下是对这些技术的详细解释以及如何利用它们进行学习和开发。 ### Java ...

    JavaServlet帮助文档

    JavaServlet帮助文档中的CHM文件是一个编译过的HTML帮助文档,它包含详细的API参考、教程、示例代码和常见问题解答,是开发者学习和查阅Servlet技术的重要资源。利用其内置的搜索功能,开发者可以快速找到所需的信息...

    Java Servlet Programming

    #### 二、Java Servlet编程的历史与背景 在《Java Servlet Programming》这本书的介绍部分,提到了Web应用程序的发展历史。自互联网兴起以来,Web应用的需求日益增长,而传统的CGI(Common Gateway Interface)程序...

    javaservlet帮助文档

    Java Servlet 是一种用于扩展Web服务器功能的Java技术,它是Java平台上的标准,允许开发者创建动态、交互式的HTTP服务。在本文中,我们将深入探讨...通过学习和实践,我们可以利用Servlet构建高效、可维护的Web系统。

    Java Servlet Api文档

    在Java Servlet API 2.5版本中,包含了对Servlet、Filter、Listener等关键概念的详细描述,以及它们在Web应用程序中的应用方式。 1. **Servlet接口**:Servlet是Java中处理网络请求的基础,它定义了web服务器如何与...

    JavaServlet学习资料汇总

    本学习资料汇总旨在为初学者提供全面、深入的JavaServlet学习资源,帮助他们快速掌握这一核心技术。 1. **Servlet基础** - **Servlet概念**:Servlet是一个Java类,遵循Servlet API规范,由服务器调用来处理HTTP...

    JavaServlet示例代码

    在这个"JavaServlet示例代码"中,我们可能会看到以下关键点: 1. **注册功能**: - 用户信息可能被存储在一个数据库中,因此需要与数据库的交互。这通常通过JDBC(Java Database Connectivity)实现,包括加载...

    Java Servlet Programming9

    Java Servlet编程是Web开发中的核心技术...以上是"Java Servlet Programming9"主题中涉及的主要知识点,每个点都值得深入学习和实践。在实际项目中,理解和掌握这些概念能够帮助开发者构建高效、稳定、安全的Web应用。

    Java Servlet开发与实例

    Java Servlet是Java EE平台中的核心组件之一,用于构建动态web应用程序。...学习和熟练掌握Servlet,是成为Java EE开发者的关键步骤。通过不断的实践和项目经验积累,你将在web开发领域更加游刃有余。

    JAVA SERVLET帮助文档(API)

    学习Servlet API文档对于理解如何创建动态Web应用至关重要。它涵盖了从基本的HTTP交互到高级的会话管理、安全控制和异步处理等方面的知识。通过深入阅读这份帮助文档,开发者能更好地掌握Java Web开发,并能构建出...

Global site tag (gtag.js) - Google Analytics