您的位置:首页 > 理论基础 > 计算机网络

HttpServletRequest详解

2016-04-05 16:49 597 查看
ServletRequest详解
一个用来向服务器提供客户端请求信息的对象. servlet container产生一个ServletRequest,然后将它作为参数传递给servlet的service方法.

Servlet可以提供如下数据:参数和对应值,属性,输入流. 实现ServletRequest的接口可以提供另外的协议有关的数据(例如,HttpServletRequest可以提供HTTP数据).

方法详解:

Object getAttribute(String name):

以对象的形式返回指定的属性值,如果属性值不存在,则返回null.

属性值可以通过两种方法设置: servletcontainer可能设置属性,以便请求的特定信息可以被访问. 例如, 使用HTTPS发送的请求,javax.servlet.request.X509Certificate能够被用来查询客户端certificate信息. 属性同样可以使用setAttribute()方法进行设置. 这可以在调用RequestDispatcher之前将信息嵌入到request中.

属性的名字,应该同样遵循报名的传统.

getAttributeNames():

返回请求所有可用属性的枚举. 如果request没有可用的属性, 那么将返回空枚举.

getCharacterEncoding():

返回本请求中字符编码的名字. 如果请求没有指定字符编码,那么将返回null.

void setCharacterEncoding(String env):

重写本请求所使用的字符编码. 本方法必须在读取请求参数或使用getReader()方法读取输入之前调用, 不然没有效果.

int getContentLength(): 以字节的形式返回request body的长度并且madeavailable by the input stream. 如果长度未知,将返回-1. 对于HTTPservlet, 其值和CGI变量CONTENT_LENGTH值相同.

String getContentType():

返回request body的MIME类型. 如果类型未知, 返回null. 对于HTTP servlet,其值和CGI变量CONTENT_TYPE相同.

ServletInputStream getInputStream(): 使用ServletInputStream返回请求体的二进制数据. 本方法或者getReader()可能被调用, 来读取请求体,但是不会同时使用.

String
getParameter(String name): 以字符串的形式返回请求参数的值,如果参数不存在,返回null, 请求参数是请求发送的而外信息, 对于HTTP servlet, 参数包含在查询字串(querystring)或发送的表格数据中.

应当确定参数只有一个值的时候才使用本方法. 如果参数可能有多个值,硬挨使用getParameterValues(java.lang.String)

如果你对有多个值的参数使用本方法, 返回的值和getParameterValues方法返回数组的第一个值相同.

如果参数是在请求体中发送的(当使用HTTP POST方法的时候, 会出现这中情况), 通过getInputStream()或getReader()直接读取body,将会干扰本方法的执行.

Enumeration
getParameterNames():返回请求中所有参数名的包含字符串数据的枚举, 如果请求没有参数, 本方法返回空枚举.

String[]
getParameterValues(String name):

返回给定参数的所有值. 如果参数不存在,返回null. 如果参数只有一个值, 数组长度为1.

Map
getParameterMap(): 返回请求所有参数的映射.

String
getProtocol(): 以protocol/majorVersion.minorVersion的格式返回请求使用的协议. 该方法返回的值和CGI变量SERVER_PROTOCOL的值相同.

String
getScheme(): 发送这个请求的时候使用的scheme, 例如http,https或ftp, 不同的scheme有不同的构造URL的方式, 在RFC 1738中注解的那样.

String
getServerName(): 返回所请求的server的主机名, 是Host header中":"前的部分. 可能是解析后的server name, 也可能时server IP地址.

int getServerPort(): Host Header ":"之后的值, 如果有的话, 或者是服务器接收客户端连接的端口.

BufferedReader
getReader(): 使用BufferedReader以字符数据的形式返回thebody of request. Reader按照body总字符的编码方式对字符进行翻译. 可以使用本方法或是getInputStream()方法来读取body,但是不能够两者一块使用.

String
getRemoteAddr(): 返回客户端的IP或者最后一个代理的IP地址. 对于HTTP servlet,拥有和CGI变量REMOTE_ADDR相同的值.

String
getRemoteHost(): 返回客户端或最后一个代理的全名, 如果不能够解析出主机名,将返回点分的IP地址, 对于HTTP servlet, 返回值和CGI变量REMOTE_HOST的值相同.

void setAttribute(String name,

Object o)

在请求中存储一个属性, 不同的请求之间见重置Attribute, 这个方法和RequestDispatcher一块使用. 属性名应该遵循和报名一样的传统. 如果设置的属性值为null, 效果同removeAttribute.

指的注意的是,如果request是从属于别的webapplication的servlet通过RequestDispatcher派发的, 这个方法设置的属性对象, 在caller servlet中可能不能够正确查询到.

void removeAttribute(String name): 删除属性,一般用不到本方法,因为属性一般只在请求处理的期间存在.

Locale
getLocale(): 基于Accept-language header返回首选的Locale,client按照这种方式接收内容. 如果client request没有提供Accept-Language header, 比本方法将返回server默认的locale

Enumeration
getLocales():

boolean isSecure(): 指示请求是否是使用安全的通道发送的, 例如HTTPS.

RequestDispatcher
getRequestDispatcher(String path): 本方法和ServletContext.getRequestDispatcher(java.lang.String)区别是本方法可以使用相对路径.

String
getRealPath(String path):Deprecated, 使用ServletContext.getPath(java.lang.String)替代.

int getRemotePort()

String
getLocalName()

String
getLocalAddr()

int getLocalPort()

HttpServletRequest详解:
HttpServletRequest: 是对ServletRequest的扩展, 提供了HTTP servlet的信息.

servlet container产生一个HttpServletRequest对象并将其作为参数传递给servlet的service方法(doGet,doPost, etc).

字段详解:

static final
String BASIC_AUTH: BASIC authentication标识符, 值是"BASIC".

FORM_AUTH: 值是"FORM"

CLIENT_CERT_AUTH: 值是"CLIENT_CERT"

DIGEST_AUTH: Value "DIGEST"

方法详解:

String
getAuthType(): 返回用来保护servlet的authentication机制的名字, 所有的servlet支持basic, form和clientcertificate认证, 其他的支持digest认证, 如果servlet没有认证,将返回null.

Cookie[]
getCookies
(): 返回包含客户端请求所有Cookie对象的数组,如果没有发送cookie,那么本方法将返回null.

long getDateHeader(String name): 返回以长整数的形式返回一个特定的请求头(request header),该长整数代表一个Date对象. 该方法可以用在包含时间信息的header中,
如: If-Modified-Since.

header name是大小写敏感的.

如果请求没有一个特定名字的header,这个方法将返回-1, 如果header不能够被转化为date,那么该方法将抛出一个IllegalArgumentException.

String
getHeader(String name): 以字符串的形式返回指定的request header的值, 如果请求不包含指定名字的header, 本方法将返回null, 如果有多个header有相同的名字,本方法返回第一个,
本方法是大小写敏感的,你可以对任何request header使用本方法.

Enumeration
getHeaders(String name):

Enumeration
getHeaderNames():

int getIntHeader(String name)

String
getMethod() :返回发送请求使用的方法, 如GET, POST, or PUT. 和CGI变量REQUEST_METHOD相同.

String
getPathInfo(): 返回客户端发送请求时使用URL的额外路径信息. 额外的路径信息是servlet后,查询子串前的部分,以"/"开头.

如果没有额外的路径信息,将返回null.

和CGI变量PATH_INFO的值相同.

String
getPathTranslated() :返回额外的路径信息,并且将它转化成实际路径, 同CGI变量PATH_TRANSLATED值相同.

如果URL没有额外的路径信息, 本方法将返回null, 或者servlet container因某些原因不能够将virtualpath转化成real path(例如, web application是在压缩包中运行时), webcontainer不会解码这个字符串.

String
getContextPath(): 返回URI中,指示request context的部分, Context一百年首先出现在请求URI中, 该路径以"/"起始, 但是不以"/"结尾. 对于位于default (root) context中的servlet, 本方法返回"", container不解析该字符串.

可能一个servlet匹配多个context path, 这种情况下, 本方法将返回请求的实际context, 并且这将和使用ServletContext.getContextPath()方法返回的值不同. ServletContext.getContextPath()返回的context path可以认为是程序的prime或首先context path.

getQueryString(): request URL包含的路径后面的查询字符串. 本方法将返回null, 如果URL不包含query string. 和CGI变量QUERY_STRING相同.

String
getRemoteUser(): 返回发送本请求用户的login, 如果用户已经被认证. 如果没有被人整,返回null. 用户名是否在后续的请求中每次都被发送和使用的浏览器和认证方式有关, 和CGI变量REMOTE_USER值相同.

boolean isUserInRole(String role):

指示验证的用户是否是包含在特定的逻辑"role"中, Roles和role membership可以通过deploymentdescriptors中定义. 如果用户没有被认证,将返回false.

Principal
getUserPrincipal():返回一个java.security.Principal对象, 包含当前认证用户的用户名. 如果user没有认证, 这个方法将返回null.

String
getRequestedSessionId():返回客户端确定的session ID, 这可能和本次请求的当前有效session的ID不同. 如果client没有确定session ID, 这个方法将返回null.

String
getRequestURI(): 返回在请求的首行中URL的从协议名到查询字串的部分. webcontainer不解析这个字串.

StringBuffer
getRequestURL():重构用户发送请求的URL, 返回的URL包含protocol, server name,port number和server path. 但是不包含query string参数.

如果这个请求通过RequestDispatcher.forword(javax.servlet.ServletRequest,javax.servlet.ServletResponse), 进行了转发, 重构URL的server path必须反映获取RequestDispatcher的路径, 而不是客户端确定的server path.

String
getServletPath(): 返回request URL中请求服务器的部分. 该路径以"/"开头, 包含servlet名字,或到该servlet的路径,但是不包含任何额外路径信息,或查询字符串, 和CGI变量SCRIPT_NAME相同.

如果用来处理请求的servlet符合"/*"的样式,本方法将返回空串("").

HttpSession
getSession(booleancreate): 返回和当前请求相关的HttpSession对象, 如果当前没有session且create是true, 返回一个新的session.

如果create是false且当前的请求没有有效的HttpSession, 这个方法返回null.

为了确保session被正确的保持,你应该在提交响应之前调用本方法. 如果container使用cookies保持session的完整性, 且要求提交响应的时候产生新的session, 将抛出IllegalStateException.

HttpSession
getSession(): 获取当前请求对象的request, 如果请求没有session, 那么产生一个.

boolean isRequestedSessionIdValid():检查被要求的session ID是否有效.

富国client没有确定任何的session ID, 这个方法将返回false.

boolean isRequestedSessionIdFromCookie():

检查要求的session ID是否以cookie的形式传递过来的

boolean isRequestedSessionIdFromURL():检查需要的session ID是否是作为URL的一部分传递过来的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: