关于HttpServletRequest和HttpServletResponse的深度分析

总启:
Web服务器与客户端之间的http请求,每一次请求创建一对request对象和需要找response对象。两者分别表示请求和响应。

1,HttpServletRequest源码分析

public interface HttpServletRequest extends ServletRequest {

public static final String BASIC_AUTH = "BASIC"; 基础验证

public static final String FORM_AUTH = "FORM"; 表单验证

public static final String CLIENT_CERT_AUTH = "CLIENT_CERT"; 客户端证书验证

public static final String DIGEST_AUTH = "DIGEST"; 摘要式身份验证

public String getAuthType(); 返回验证方式

public Cookie[] getCookies();获得请求Cookies

public long getDateHeader(String name); 得到请求发送时格林时间
		
public String getHeader(String name); 得到请求头
	
public Enumeration<String> getHeaders(String name); 得到一组请求头

public Enumeration<String> getHeaderNames(); 得到一组请求头名

public int getIntHeader(String name); 得到int型的请求头

public String getMethod(); 返回http方法名比如GET, POST, or PUT

public String getPathInfo(); 返回关联路径信息(请求路径)

public String getPathTranslated(); 返回servlet名称后面的任何额外路径信息

public String getContextPath();返回请求URI中指示请求上下文的部分

public String getQueryString();返回路径后请求URL中包含的查询字符串

public String getRemoteUser();返回发出此请求的用户的登录名

public boolean isUserInRole(String role); 已验证用户是否包含在指定的逻辑“角色”中

public java.security.Principal getUserPrincipal(); 返回包含当前已验证用户的名称的对象

public String getRequestedSessionId();返回客户端指定的会话ID

public String getRequestURI();返回从协议名到HTTP请求第一行中的查询字符串的此请求的URL部分。

public StringBuffer getRequestURL(); 重建客户端用于发出请求的URL。返回的URL包含协议、服务器名称、port编号和服务器路径,但不包含查询字符串参数

public String getServletPath();返回此请求的URL中调用servlet的部分

public HttpSession getSession(boolean create); 返回与此请求关联的当前会话,否则返回创建的新会话。

public HttpSession getSession();返回与此请求关联的当前会话,否则返回创建的新会话。

public String changeSessionId(); 返回改变当前会话的id,或返回一个新的会话id

public boolean isRequestedSessionIdValid(); 检查请求的会话ID是否仍然有效

public boolean isRequestedSessionIdFromCookie(); 检查请求的会话ID是否作为cookie传入

public boolean isRequestedSessionIdFromURL();检查请求的会话ID是否作为请求URL的一部分传入

public boolean authenticate(HttpServletResponse response) 
throws IOException,ServletException; 使用为servletContext配置的容器登录机制来验证发出此请求的用户

public void login(String username, String password) 
throws ServletException; 验证为servletcontext配置的Web容器登录机制使用的密码验证域中提供的用户名和密码。

public void logout() throws ServletException; 在请求时调用getUserPrincipal、getRemoteUser和getAuthType时,将返回的值设置为null

public Collection<Part> getParts() throws IOException, ServletException; 获取此请求的所有@link part组件,前提是它的类型为multipart/form data。

public Part getPart(String name) throws IOException, ServletException; 获取具有给定名称的@链接部分

public <T extends HttpUpgradeHandler> T  upgrade(Class<T> handlerClass)
    throws IOException, ServletException; 为给定类创建httpupgradeHandler的实例,并将其用于HTTP协议升级处理
}

2,HttpServletResponse源码分析

public interface HttpServletResponse extends ServletResponse {

public void addCookie(Cookie cookie); 添加Cookie

public boolean containsHeader(String name); 是否已设置命名响应头

public String encodeURL(String url); 对指定url进行编码

public String encodeRedirectURL(String url); 对RedirectURL进行编码

public void sendError(int sc, String msg) throws IOException; 使用指定的状态向客户端发送错误响应并清除缓冲区

public void sendError(int sc) throws IOException;

public void sendRedirect(String location) throws IOException; 重定向位置URL向客户端发送临时重定向响应并清除缓冲区

public void setDateHeader(String name, long date);设置响应头的名称和日期

public void addDateHeader(String name, long date); 添加响应头的名称和时间

public void setHeader(String name, String value); 设置响应头的名称和值

public void addHeader(String name, String value); 添加响应头的名称和值

public void setIntHeader(String name, int value);设置响应头的名称和int类型的值

public void addIntHeader(String name, int value); 添加响应头的名称和int类型的值

public void setStatus(int sc); 设置此响应的状态代码

public void setStatus(int sc, String sm); 设置状态码,和代表信息

public int getStatus(); 得到当前返回的状态码

public String getHeader(String name);  获取给定名称的响应头的值
		
public Collection<String> getHeaders(String name); 获取给定名称响应头的值,返回集合泛型string

public Collection<String> getHeaderNames(); 获取响应头的名称,返回集合泛型string

public static final int SC_CONTINUE = 100; 指示客户端可以继续

public static final int SC_SWITCHING_PROTOCOLS = 101; 服务器正在根据升级头交换协议

// 2开头 (请求成功)表示成功处理了请求的状态代码。
public static final int SC_OK = 200; 请求正常

public static final int SC_CREATED = 201; (已创建) 请求成功并且服务器创建了新的资源

public static final int SC_ACCEPTED = 202;(已接受) 服务器已接受请求,但尚未处理

public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;(非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 

public static final int SC_NO_CONTENT = 204;(无内容) 服务器成功处理了请求,但没有返回任何内容。

public static final int SC_RESET_CONTENT = 205;(重置内容) 服务器成功处理了请求,但没有返回任何内容。

public static final int SC_PARTIAL_CONTENT = 206;(部分内容) 服务器成功处理了部分 GET 请求。

//3开头 (请求被重定向)表示要完成请求,需要进一步操作。
public static final int SC_MULTIPLE_CHOICES = 300; (多种选择) 针对请求,服务器可执行多种操作。

public static final int SC_MOVED_PERMANENTLY = 301; (永久移动) 请求的网页已永久移动到新位置。

public static final int SC_MOVED_TEMPORARILY = 302;(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

public static final int SC_FOUND = 302;

public static final int SC_SEE_OTHER = 303;(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 

public static final int SC_NOT_MODIFIED = 304;(未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 

public static final int SC_USE_PROXY = 305;(使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 

public static final int SC_TEMPORARY_REDIRECT = 307;(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

//4开头 (请求错误)
public static final int SC_BAD_REQUEST = 400; (错误请求) 服务器不理解请求的语法。 

public static final int SC_UNAUTHORIZED = 401;(未授权) 请求要求身份验证。

public static final int SC_PAYMENT_REQUIRED = 402; 服务器的配置导致登录失败

public static final int SC_FORBIDDEN = 403;(禁止) 服务器拒绝请求。

public static final int SC_NOT_FOUND = 404;(未找到) 服务器找不到请求的网页。

public static final int SC_METHOD_NOT_ALLOWED = 405;(方法禁用) 禁用请求中指定的方法。

public static final int SC_NOT_ACCEPTABLE = 406;(不接受) 无法使用请求的内容特性响应请求的网页。 

public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;需要代理授权) 此状态代码与 401(未授权)类似

public static final int SC_REQUEST_TIMEOUT = 408;(请求超时) 服务器等候请求时发生超时。

public static final int SC_CONFLICT = 409;(冲突) 服务器在完成请求时发生冲突。

public static final int SC_GONE = 410;(已删除) 如果请求的资源已永久删除,服务器就会返回此响应。

public static final int SC_LENGTH_REQUIRED = 411;(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

public static final int SC_PRECONDITION_FAILED = 412;(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 

public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 

public static final int SC_REQUEST_URI_TOO_LONG = 414;(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 

public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;(不支持的媒体类型) 请求的格式不受请求页面的支持。 

public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。

public static final int SC_EXPECTATION_FAILED = 417;(未满足期望值) 服务器未满足”期望”请求标头字段的要求。

5开头(服务器错误)
public static final int SC_INTERNAL_SERVER_ERROR = 500;(服务器内部错误) 服务器遇到错误,无法完成请求。

public static final int SC_NOT_IMPLEMENTED = 501;(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

public static final int SC_BAD_GATEWAY = 502; 服务器作为网关或代理,从上游服务器收到无效响应

public static final int SC_SERVICE_UNAVAILABLE = 503; HTTP服务器暂时过载,无法处理请求

public static final int SC_GATEWAY_TIMEOUT = 504; 服务器作为网关或代理,但是没有及时从上游服务器收到请求

public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;  服务器不支持或拒绝支持请求消息中使用的HTTP协议版本
}

进一步分析我们可以看到上面这两者继承了ServletRequest和ServletResponse,其实很多的方法就在其中。
首先说重要的,ServletResponse我需要比ServletRequest更深的理解。
ServletResponse源码分析

public interface ServletResponse {

public String getCharacterEncoding(); 返回编码code名

public String getContentType(); 返回用于此响应中发送的mime主体的内容类型,例如:text/html; charset=UTF-8

public ServletOutputStream getOutputStream() throws IOException;
返回一个@link servletoutputstream适合在响应中写入二进制数据。servlet容器不编码二进制数据

public PrintWriter getWriter() throws IOException; 返回可向客户端发送字符文本PrintWriter

public void setCharacterEncoding(String charset); 设置响应头编码

public void setContentLengthLong(long len);设置HTTP内容头长度

public void setContentType(String type);设置发送到客户端的响应的内容类型

public void setBufferSize(int size);设置响应主体的首选缓冲区大小

public int getBufferSize(); 返回相应头的缓冲区大小

public void flushBuffer() throws IOException; 强制将缓冲区中的任何内容写入客户端

public void resetBuffer(); 清除响应中基础缓冲区的内容,而不清除头或状态代码

public boolean isCommitted(); 是否已提交响应

public void reset(); 清除缓冲区中存在的任何数据以及状态代码、头

public void setLocale(Locale loc); 如果相应还没有被提交,设置响应的区域设置

public Locale getLocale(); 返回响应的区域设置
}

ServletRequest源码分析

public interface ServletRequest {

public Object getAttribute(String name); 根据名称获取属性

public Enumeration<String> getAttributeNames(); 获取所有属性。string的枚举

public String getCharacterEncoding(); 返回编码code

public void setCharacterEncoding(String env) throws UnsupportedEncodingException;设置字符编码

public long getContentLengthLong();返回请求正文的长度

public String getContentType();返回MIME类型的请求主体

public ServletInputStream getInputStream() throws IOException; 返回包含请求正文的@link servletinputstream对象 
 
public String getParameter(String name);根据名称返回请求参数

public Enumeration<String> getParameterNames();返回所有请求参数名
    
public String[] getParameterValues(String name);返回包含参数值的对象数组

public Map<String, String[]> getParameterMap();返回map,其中参数名作为键,参数值作为映射值
   
public String getProtocol(); 返回协议名称和版本号

public String getScheme();返回发出此请求的方案的名称

public String getServerName(); 返回服务器名称

public int getServerPort();返回服务器端口

public BufferedReader getReader() throws IOException; 返回包含请求正文的BufferedReader

public String getRemoteAddr(); 返回发送请求的客户端或上一个代理的Internet协议(IP)地址

public String getRemoteHost();返回客户端的完全限定名的字符串

public void setAttribute(String name, Object o);在此请求中存储属性,键值对形式

public void removeAttribute(String name);根据名称移除属性

public Locale getLocale();返回客户端的首选locale

public Enumeration<Locale> getLocales(); 返回所有客户端的locale

public boolean isSecure(); 请求是否安全https/http

public RequestDispatcher getRequestDispatcher(String path);返回一个requestDispatcher对象,该对象充当指定路径上资源的wrapper。

public String getRealPath(String path); 根据路径得到全路径,局限2.1版本
  
public int getRemotePort(); 返回Internet协议(IP)源端口

public String getLocalName();返回Internet协议(IP)接口的主机名。
  
public String getLocalAddr();返回请求的Internet协议(IP)地址

public int getLocalPort(); 返回请求的Internet协议(IP)端口

public ServletContext getServletContext();返回servletrequest上次调度到的servlet上下文

public AsyncContext startAsync() throws IllegalStateException;返回(重新)初始化的AsyncContext

public AsyncContext startAsync(ServletRequest servletRequest,
                               ServletResponse servletResponse)
        throws IllegalStateException;返回(重新)初始化的AsyncContext

public boolean isAsyncStarted();返回是否被置于异步模式

public boolean isAsyncSupported();返回是否请求支持异步操作

public AsyncContext getAsyncContext(); 创建或重新初始化的AsyncContext,需带参数

public DispatcherType getDispatcherType();返回dispatcher请求类型
}

虽然分析了这么多,还是要在实际中遇到才能加深印象。继续加油!???????

关于response.setHeader(String name, String value)的常用:
详尽解释参考:https://blog.csdn.net/junmoxi/article/details/76976692

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值