Java Specification Requirement 之 Servlet 第三章

Java Specification Requirement 之 Servlet 第三章


翻译by:潘星臣
任何问题,发送到:
admin@optrees.org
admin@wewebos.com
 
                    The Request

    request 对象封装了来自客户端请求的所有信息。在HTTP协议下,这些信息包括从客户端传向服务器的HTTP报头和请求的消息正文。

    3.1 HTTP 协议参数
    servlet的 Request 参数是一些由客户端传给 servlet 容器的字符串,这些字符串是 request 的一部分。当 request 是一个 HttpServletRequest 对象的时候,容器从URI查询字符串和POST数据获得参数。
    参数通过一种“名字-值”对的形式保存。对于一个给定的参数名,可以同时存在多个值。以下是 ServletRequest 接口定义的用来访问参数的方法:
        getParameter
        getParameterNames
        getParameterValues
        getParameterMap
    getParameterValues方法返回一个String对象数组,包含了关联到一个参数名的所有值。getParameter方法返回的是getParameterValues方法返回数组的第一个值。getParameterMap 方法返回一个 java.util.Map 的request参数Map,以名字作为key,参数的值作为map值。
    从查询字符串和Post正文传输的数据都聚集到request参数集合里。查询字符串的数据先于Post正文呈现。例如,查询字符串传递了a=hello,post正文是:a=goodbye&a=world,那么在参数集合里将按照a=(hello,goodbye,world)的方式存放。
    路径参数是Get request(在HTTP 1.1中定义)的一部分,但是在本API中并没有提供。必须通过分析 getRequestURI() 或者 getPathInfo() 函数返回的字符串来得到。
   
    3.1.1    当参数可用的时候
    在Post的数据被加入参数集之前,必须先满足以下条件。
    1.请求必须是一个 HTTP或HTTPS 请求.
    2.HTTP方法必须是POST.
    3.内容的类型必须是 application/x-www-form-urlencoded.
    4.servlet初始化调用了request对象上的任意一个 getParameter 函数族.
   
    如果条件不满足而且post的数据没有包含在参数集合里,那么 servlet 依然可以通过 request 对象的输入流获取到post的数据。如果条件满足,那么post的数据就不能直接从request对象的输入流里获得了。

    3.2    属性
   
    属性是关联在request上的对象们。属性可以是由容器设置的,用来表示那些不能通过API表达的信息,也可以是由 servlet 来设置,用来与其他servlet通讯(通过RequestDispatcher)。属性可以通过ServletRequest接口的以下函数来访问:
        getAttribute
        getAttributeNames
        setAttribute
    一个属性名只能关联一个属性值。
    属性名以"java."或者"javax."为前缀开头的,在本规格说明书中都被保留。同样的,以"sun."或"com.sun."为前缀的属性也被Sun Microsystems保留。因此建议所有属性的命名遵照 Java Programming Language Spectificatiion里关于包命名的保留规则。
   
    3.3 报头
    servlet 能够访问到HTTP请求的报头,通过以下 HttpServletRequest 接口的方法。
        getHeader
        getHeaders
        getHeaderNames
    getHeader函数根据给定的名字返回一个报头。同一个名字可以关联多个报头,例如在HTTP请求里的Cache-Control报头。如果一个名字关联了多个报头,那么getHeader函数返回的是request中的第一个报头。getHeaders 函数允许访问报头名所关联的所有报头,它返回的是一个String对象组成的Enumeration。
    报头可能会通过包含String而表示int或Date类型的数据。HttpServletReques接口提供了一些通过别的格式访问报头数据的方法:
        getIntHeader
        getDateHeader
    如果 getIntHeader 方法不能转换报头的值到int,将会抛出一个 NumberFormatException 的异常。如果getDateHeader方法不能转换报头值到Date对象,那么就会抛出一个 IllegalArgumentException 异常。   
   
    3.4 请求路径(Request Path)的原理
    请求路径是用来引导一个 servlet 处理一个请求,它由很多重要的部分构成。以下的内容是能从 request URI path获得的以及能通过request对象暴露的:
    Context Path:这个路径前缀与 ServletContext 相关联。
   
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值