欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!
HttpServletRequest是在ServletRequest基础上做的进一步封装,使得其更适用于基于HTTP的服务特性,在原有的ServletRequest API基础上增加了处理HTTP的操作。Servlet容器开发厂商会依据HttpServletRequest API进行具体实现,闲言少叙,接下来让我们看下源码。
HttpServletRequest
package javax.servlet.http;
import javax.servlet.ServletRequest;
import java.util.Enumeration;
/**
* 继承自javax.servlet.ServletRequest.
* 专门为HTTP Servlet提供的请求封装类.
* 由容器创建并传递给Servlet的sevice类.
*/
public interface HttpServletRequest extends ServletRequest {
/**
* 基于BASIC认证.
*/
public static final String BASIC_AUTH = "BASIC";
/**
* 基于FORM认证.
*/
public static final String FORM_AUTH = "FORM";
/**
* 基于CLIENT_CERT认证.
*/
public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";
/**
* 基于DIGEST认证.
*/
public static final String DIGEST_AUTH = "DIGEST";
/**
* 返回认证类型.
* 所有Servlet容器都支持basic、form、client_cert,digest不一定支持.
* 若不支持,则返回null.
*/
public String getAuthType();
/**
* 获取请求中带有的Cookie信息.
*/
public Cookie[] getCookies();
/**
* 以长整数形式返回一个特定的请求头,该长整数代表一个Date对象.
* 该方法可以用在包含时间信息的header中,如:If-Modified-Since.
* @param name 头名称.
* @return 头值.
*/
public long getDateHeader(String name);
/**
* 根据指定的头名称获取头的值.
* 若存在多个,则返回第一个.
* @param name 头名称.
* @return 头值.
*/
public String getHeader(String name);
/**
* 根据指定的头名称获取头值的枚举.
* 若没有找到,则返回空的枚举.
* @param name 头名称.
* @return 头值.
*/
public Enumeration getHeaders(String name);
/**
* 获取所有的头的枚举.
* @return 头的枚举.
*/
public Enumeration getHeaderNames();
/**
* 根据指定头名称获取int类型的值.若未找到则返回-1,如不是int类型,则会抛出NumberFormatException异常.
* @param name 头名称.
* @return 头值.
*/
public int getIntHeader(String name);
/**
* 获取HTTP方法,如:GET、POST、PUT等.
* @return 方法名.
*/
public String getMethod();
/**
* 官网解释:
* 返回与客户端发出此请求时发送的URL相关联的任何额外路径信息.
* 额外的路径信息跟随servlet路径,但位于查询字符串之前,并以"/"字符开头.
* 例如:url-pattern配置为/demo/*,请求URL为http://localhost/Pro/demo/htm/index.html,则pathInfo为/htm/index.html.
* @return
*/
public String getPathInfo();
/**
* 返回servlet名称之后、
* 查询字符串之前的任何额外路径信息,并将其转换为实际路径.
* 与转换的CGI变量PATH U的值相同
* @return
*/
public String getPathTranslated();
/**
* 返回项目根路径.
* 例如:url-pattern配置为/demo/*,请求URL为http://localhost/Pro/demo/htm/index.html,则contextPath为/demo.
* @return 项目根路径.
*/
public String getContextPath();
/**
* 获得请求中的查询字符串,例如a=1&b=2这样的格式.
* @return 查询字符串.
*/
public String getQueryString();
/**
* 如果用户已经过验证,则返回发出此请求的用户的登录信息,如果用户未经过验证,则返回 null.
* 用户名是否随每个后续请求发送取决于浏览器和验证类型,返回的值与 CGI变量REMOTE_USER的值相同.
* @return 用户信息.
*/
public String getRemoteUser();
/**
* 返回一个 boolean值,指示指定的逻辑"角色"中是否包含经过验证的用户.
* 角色和角色成员关系可使用部署描述符定义.
* 如果用户没有经过验证,则该方法返回 false.
* @param role 角色.
* @return 已验证用户是否属于某种角色.
*/
public boolean isUserInRole(String role);
/**
* 返回包含当前已经过验证的用户的名称的 java.security.Principal对象.
* 如果用户没有经过验证,则该方法返回 null.
* @return java.security.Principal或null.
*/
public java.security.Principal getUserPrincipal();
/**
* 获取请求对应的sessionId.
* @return sessionId.会话ID.
*/
public String getRequestedSessionId();
/**
* 请求URL的相对地址,包括服务器路径,不包括查询参数.
* @return 请求URL的相对地址.
*/
public String getRequestURI();
/**
* 请求的URL地址,包含协议、主机名、端口和服务器路径,但是不包括查询参数.
* @return 请求URL地址.
*/
public StringBuffer getRequestURL();
/**
* 官方解释:
* 返回此请求的URL中调用servlet的部分.
* 此路径以"/"字符开头,包含servlet名称或到servlet的路径,但不包含任何额外的路径信息或查询字符串.
* 与CGI变量SCRIPT_NAME的值相同.
* 其实真是的意思就是,在配置webx.xml或编程式配置时,配置了url-pattern,请求的URL与url-pattern的有效部分重合部分就是servletPath,
* 也可以理解为url-pattern的有效部分就是servletPath.
* 例如:url-pattern配置为/demo/*,请求URL为http://localhost/Pro/demo/htm/index.html,则servletPath为/demo.
* @return
*/
public String getServletPath();
/**
* 获得请求对应的当前sesson.
* 在没有session的情况下:
* 若create=true,则新创建一个session.
* 若create=false,则不创建session,返回null.
* @param create session失效的情况下,是否创建session.
* @return HttpSession实例.
*/
public HttpSession getSession(boolean create);
/**
* 获得请求对应的当前sesson.
* 若没有session,则创建一个session.
* @return HttpSession实例.
*/
public HttpSession getSession();
/**
* 返回session是否有效.
* @return session是否有效.
*/
public boolean isRequestedSessionIdValid();
/**
* sessionId是否从Cookie中获得.
* @return 若是从Cookie中获得,返回true,否则返回false.
*/
public boolean isRequestedSessionIdFromCookie();
/**
* sessionId是否从URL中获得.
* @return 若是从URL中获得,返回true,否则返回false.
*/
public boolean isRequestedSessionIdFromURL();
/**
* @deprecated
* sessionId是否从URL中获得.
* @return 若是从URL中获得,返回true,否则返回false.
*/
public boolean isRequestedSessionIdFromUrl();
}
若文中存在错误和不足,欢迎指正!
本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!