Java+Servlet+Specification - - ++Version+2.3(2)

2019-03-15 12:20

3.3 初始化参数

以下ServletContext接口中的方法允许servlet访问开发人员在配置描述中定义的web应用初始化参数: . getInitParameter

. getInitParameterNames

应用开发人员使用初始化参数传递构建信息,例如管理员的邮件地址等.

3.4 context属性

可以在context中用名称邦定一个对象属性.context中的任何属性对于同一web应用下的其他servlet都是可用的.下列方法完成了这样的功能:

. setAttribute . getAttribute

. getAttributeNames . removeAttribute

3.4.1 在分布式容器中的context属性

对于创建它们的虚拟机来说context属性是本地的. 这使得ServletContext属性不能以共享内存的方式存储在分布式的容器中.如果有些信息需要在不同的机器上运行的servlet之间共享的话,它们应该被存储在session中,数据库中,或EJB组件中.

3.5 资源

使用ServletContext接口可以直接访问web应用中的静态内容文档结构.包括HTML,GIF和JPEG文件.如以下方法: .getResource

.getResourceAsStream

这两个方法的参数都是以\开头的字符串,表示资源相对于context根的相对路径.文档结构可以存在于服务器文件系统,或是war包中,或是在远程服务器上,抑或其他位置.

以上方法不可以用来获得动态资源,比如,getResource(\这个方法将返回该jsp文件的源码,而不是动态页面.可以用\Requests\获得动态内容.

列出web应用中可被访问的资源,可以使用getResourcePaths(String path)方法。

3.6多主机和servlet context

web服务器支持在一台机器上共享一个IP的多个逻辑主机,这种能力被称为\虚拟主机\每个逻辑主机都拥有它自己的servlet context。servlet context不能跨虚拟主机共享.

3.7 重新装载

虽然容器提供重新装载的实现对于开发有益,但不是必须的。这些实现必须确保所有的servlet、和它们所使用的类在单独的类装载器范围内被

装载。此机制保证了应用正常运行。

Previous generations of containers created new class loaders to load a servlet,distinct from class loaders used to load other servlets or classes used in the servlet context. This could cause object references within a servlet context to point at unexpected classes or objects, and cause unexpected behavior. The requirement is needed to prevent problems caused by demand generation of new class loaders. (不确定的参考译文:

容器用来装载servlet的类装载器和ServletContext用来装载servlet和其他类的装载器不同,这导致在servlet上下文之内的对象引用指向不可预期的类或对象, 和不可预期的行为。需要防止由新的类装载器产生的问题.)

3.8 临时工作目录

每个servlet context都有它自己的临时存储目录,容器必须为每个servlet conetxt提供一个私有的临时目录,存储于context属性javax.servlet.context.tempdir.该对象必须是java.io.File类型.容器启动时,不需要维护该临时目录的内容,但必须确保一个servlet context临时目录的内容对其他web应用(servlet context)是不可见的.

第四章 Request

4.1 HTTP协议参数

servlet的请求参数是客户机发送给servlet容器的字符串,它是请求的一部分.当请求是一个HttpServletRequest对象时,且条件设置合适时,容器从URI请求字符串和POST数据中组装参数.

参数的存储为名称-值成对形式,对于同一个名称可能存在多参数值.以下ServletRequest接口方法可以访问参数: .getParameter

.getParameterNames .getParameterValues

getParameterValues方法返回一个字符串对象数组,包含有和指定名称关联的所有参数值.getParameter方法返回的是该数组的第一个参数值. 查询字符串和post body 包含的数据被组装到request参数集合中,query string中的数据顺序要优先于post body中的数据.比如:

如果一个请求使用查询字符串 a=hello 和post body a=goodbye&a=world,最后的参数集顺序是a=(hello,goodbye,world).

路径参数需要使用getRequestURI和getPathInfo方法获得.

4.1.1 什么时候参数可用

POST form 中的数据被放进参数集之前,必须符合以下条件: 1.必须是HTTP或HTTPS请求 2.HTTP方法是POST

3.内容类型是application/x-www-form-urlencoded

4.servlet 调用了request对象上的getParameter之类与参数相关的方法.

如上述条件不满足的话,被POST的form中的数据不会包含在参数集中,但数据仍可以通过request对象的输入流得到。否则数据不能通过request对象的输入流得到。

4.2 属性

属性是和request关联的对象。它一般被容器用作存储不能通过API获得的信息,或者是用作与其他servlet的通讯信息(通过RequestDispatcher)。属性可以用以下方法访问: .getAttribute

.getAttributeNames .setAttribute

一个属性名只能和一个属性值关联。

以“java.”,\开始的属性名是本规范的保留定义,同样,以\开头的属性名是Sun公司的保留定义。建议所有的属性名以包命名规范。

4.3 头(Headers)

servlet通过以下方法访问HTTP request的头信息。 .getHeader .getHeaders

.getHeaderNames

.getHeader方法返回与头名称对应的头信息。同一个名称可能有多个头信息对应。比如:Cache-Control头。如果这样,该方法应该 返回第一个。要取得所有信息,则使用getHeaders方法。

头信息也许是某些整型或日期型,可以直接使用下面方法读取: .getIntHeader .getDateHeader

如果getIntHeader方法不能将值转换为整数,将抛出NumberFormatException异常。如果.getDateHeader方法不能将值转换为日期对象,将抛出IllegalArgumentException异常。

4.4 请求路径

请求路径由许多重要的部分组成。下列元素从请求URI获得,并通过request对象暴露。

.Context Path:和此servlet所在的ServletContext关联的路径前缀,如果context是\context,那么该路径为\,另外,如果该context不是root,那么路径以\开头,但不能以\结束。

.servlet path:此部分和请求的映射相关,以\开始,但如果该映射是\,那么servlet路径此时为\

.PathInfo:此部分是context path 和servlet path 的一部分。如没有额外路径它为null,否则是以\开始的字符串。

HttpServletRequest接口中的以下方法可以访问这些信息: .getContextPath .getServletPath .getPathInfo

值得注意的是,URI和路径之间除了URL编码区别外,以下等式是成立的:

requestURI = contextPath + servletPath + pathInfo 例子:

Context Path /catalog

Servlet Mapping Pattern: /lawn/* Servlet: LawnServlet

Servlet Mapping Pattern: /garden/* Servlet: GardenServlet

Servlet Mapping Pattern: *.jsp Servlet: JSPServlet

我们发现:

Request Path Path Elements

/catalog/lawn/index.html ContextPath: /catalog ServletPath: /lawn PathInfo: /index.html

/catalog/garden/implements/ ContextPath: /catalog ServletPath: /garden PathInfo: /implements/

/catalog/help/feedback.jsp ContextPath: /catalog ServletPath: /help/feedback.jsp PathInfo: null

4.5 路径转换方法

API中有两个方便的方法可以让开发人员获得和某个路径相关的文件系统路径:

.ServletContext.getRealPath

.HttpServletRequest.getPathTranslated

getRealPath接受一个字符串参数,并返回和该路径相关联的文件系统路径。getPathTranslated方法则可以得到该request的PathInfo对应的真实路径。下列情况下,servlet容器不能判别合法的文件路径,如,web应用以war包形式运行,或者不是本地文件路径,或者在数据库中,这些方法

将返回NULL.

4.6 cookie

HttpServletRequest接口提供getCookies方法获得该request中的cookies数组。这些cookies是客户机每次发送给服务器请求中的数据,其形式为cookie名和cookie值。当cookie被送回给客户机时也可设置其他属性,比如注释,但一般是不会送回服务器的。

4.7 SSL属性

如果请求是通过安全协议传输的,如:HTTPS,那么ServletRequest接口的isScure方法可以得到。

4.8 国际化

客户机可以向web服务器提示它以何种语言接受服务器的响应.HTTP1.1规范中指出在头信息Accept-Language表示。以下方法可以得到发送者的地域信息: .getLocale .getLocales

如果客户机没有指定地域信息,servlet容器将会使用默认的地域信息设定。

4.9 请求数据编码

目前,许多浏览器在Content-Type头中不会指定字符编码方式,那么容器就会使用\方式解析POST数据,而此时,为了向开发人员提示字符编码方式未指定,容器将会在getCharacterEncoding返回null. 如果客户机没有设置字符编码信息,但是request数据又以和缺省编码方式不同的方式编码,就会发生数据破坏。setCharacterEncoding(String enc)方法可以防止这种状况发生,但是必须在解析数据或从request中读取数据之前调用。否则调用该方法不会有任何效果。

4.10 request对象的生命周期

request对象只在servlet的service方法范围内有效。或者是在filter的doFilter方法内,开发人员必须确信在范围之外引用request对象行为不会导致不可预计的后果。

第五章 Response

response对象包装了所有从服务器发送到客户机的的信息,在HTTP协议中,这些信息被分为HTTP头和消息体的两部分。

5.1 缓冲

servlet容器被允许但不被要求,缓冲发送到客户机的输出.一般情况下


Java+Servlet+Specification - - ++Version+2.3(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:三点法 比例导引法 课程设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: