`
lhx1026
  • 浏览: 301212 次
  • 性别: 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类。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics