1、前言
在《Servlet学习笔记 -ServletRequest、ServletResponse》内容中,已经学习了在Servlet应用中的的request、response两个重要的接口。今天我们来学习在Servlet应用扩展了Http协议后对应的两个接口,分别是:HttpServletRequest、HttpServletResponse。
2、HttpServletRequest
HttpServletRequest接口就是继承于ServletRequest接口,然后在此基础上提供了一些HTTP协议的相关方法,主要应用在Web应用的开发中。Servlet容器在处理请求时,会创建一个HttpServletRequest对象作为参数传递给了service()方法,然后在转发给doXXX()方法。
HttpServletRequest中定义的Authentication类型:
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";
在HttpServletRequest中提供了上述的四种认证方式,分别如下:
- BASIC 基本认证
- FORM 表单认证
- CLIENT_CERT 客户端证书认证
- DIGEST 摘要访问认证
HttpServletRequest中定义的认证相关方法:
- public String getAuthType();
获取认证类型,即上面提到的Authentication类型。如果没有使用认证功能,就返回null。 - public Cookie[] getCookies();
获取request中包含的所有缓存信息。 - public long getDateHeader(String name);
获取请求头中指定name的时间类型的值,比如:“If-Modified-Since”。如果没有该变量,则返回“-1”,如果存在,但是不是时间类型的,则抛出IllegalArgumentException异常。 - String getHeader(String name);
获取请求头中指定name的值。如果没有对应name,则返回null;如果存在多个同样name的header,则返回第一个。 - public Enumeration getHeaders(String name);
返回请求头中指定name对应值的Enumeration集合,如果没有对应的name,则返回空的Enumeration集合。 - public Enumeration getHeaderNames();
返回请求头中包括的所有header对应的name的Enumeration集合。 - public int getIntHeader(String name);
获取请求头中指定name的int类型的值。如果不存在对应name,则返回-1,如果存在的name的值不是int类型的,就会抛出NumberFormatException异常。 - public String getMethod();
获取当前request请求的方法名,比如Get、Post、Put等。 - public String getServletPath();
获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括(后续通过例子来演示)。 - public String getPathInfo();
与getServletPath()获取的路径互补,能够得到的是“url-pattern”中*的路径部分 - public String getPathTranslated();
该方法获取URL中在Servlet 名称之后,在检索字符串之前的路径信息。 - public String getContextPath();
和ServletContext.getContextPath()返回的一样,获取项目的根路径。 - public String getRequestURI();
获取根路径到地址结尾 - public StringBuffer getRequestURL();
获取请求的地址链接(浏览器中输入的地址) - public String getQueryString();
用来获取检索字符串。 - public String getRemoteUser();
获取当前request请求中登录用户的名称。 - public boolean isUserInRole(String role);
验证当前登录用户是否属于给定的角色。 - public java.security.Principal getUserPrincipal();
获取当前用户的java.security.Principal对象,该对象一般会包括已经认证的用户名称。 - public String getRequestedSessionId();
获取当前request请求的SessionID,该SessionID可以无效,所以一般和isRequestedSessionIdValid()方法一起使用。如果没有SessionID就会返回null。 - public HttpSession getSession(boolean create);
获取当前request请求的HttpSession,如果没有HttpSession且create=true,就会创建一个新的HttpSession,否则就会返回null。 - public HttpSession getSession();
相当于带参数的getSession()方法中,参数一致true。 - public String changeSessionId();
改变当前请求对应的SessionId,如果不存在关联的Session,就会抛出IllegalStateException异常。 - public boolean isRequestedSessionIdValid();
获取当前请求关联的SessionId是否有效。 - public boolean isRequestedSessionIdFromCookie();
获取当前SessionId是否写进了Cookie中。 - public boolean isRequestedSessionIdFromURL();
判断当前SessionId是否作为请求地址的一部分。 - public boolean authenticate(HttpServletResponse response) throws IOException,ServletException;
验证当前响应信息中的用户信息是否已经认证过了。 - public void login(String username, String password) throws ServletException;
验证用户名、密码是否正确。 - public void logout() throws ServletException;
登出操作。 - public Collection getParts() throws IOException, ServletException;
获取multipart/form-data类型的request请求中的所有附件内容。如果没有附件内容,就返回空的Collection对象;如果请求不是multipart/form-data类型类型的,就会抛出ServletException异常。 - public Part getPart(String name) throws IOException, ServletException;
和getParts() 方法类似,不过这个方法是获取指定name的附件类型。 - public T upgrade(Class handlerClass) throws IOException, ServletException;
预留的http协议的升级方法。
3、HttpServletResponse
HttpServletResponse是HttpServletRequest的孪生兄弟,一般都是成对出现的,一个负责客户端的请求,一个负责客户端的响应。HttpServletResponse是继承于ServletResponse的接口,然后增加了一些HTTP协议的相关方法。和HttpServletRequest实例对象一样,Servlet容器在处理请求时,也会创建一个HttpServletResponse对象作为参数一起传递给service()方法,然后在转发给doXXX()方法。
HttpServletResponse接口中定义的方法:
- public void addCookie(Cookie cookie);
添加Cookie信息,可以调用多次,即添加多个Cookie对象。 - public boolean containsHeader(String name);
判断response响应头中是否包含指定name的header。 - public String encodeURL(String url);
对URL进行编码。 - public String encodeRedirectURL(String url);
和encodeURL()方法类似,不过这方法主要是编码那些供sendRedirect()方法使用的URL。 - public void sendError(int sc, String msg) throws IOException;
发送错误信息到客户端,包括状态码和错误信息。如果在Web应用中,定义了错误页面,且和错误码匹配的话,就会返回错误的页面。 - public void sendError(int sc) throws IOException;
和重载的sendError()方法,功能一样。 - public void sendRedirect(String location) throws IOException;
执行跳转,跳转到location指定的路径或资源。 - public void setDateHeader(String name, long date);
在response响应头中,添加时间类型的header。如果对应的name已经存在,就会覆盖原来的值。 - public void addDateHeader(String name, long date);
和setDateHeader()方法类似,添加header,区别在于:这个方法可添加多个同名的header,而不是覆盖原有的header。 - public void setHeader(String name, String value);
在response响应头中,添加header。如果对应的name已经存在,就会覆盖原来的值。 - public void addHeader(String name, String value);
和setHeader()作用一样,区别在于:不限制同名的header。 - public void setIntHeader(String name, int value);
在response响应头中,添加整型的header。如果对应的name已经存在,就会覆盖原来的值。 - public void addIntHeader(String name, int value);
和setHeader()作用一样,区别在于:不限制同名的header。 - public void setStatus(int sc);
设置response响应的错误码,但是该方法不会触发错误页面机制,即根据错误码返回指定页面。 - public int getStatus();
获取当前response的响应码。 - public String getHeader(String name);
获取response响应头中指定name的header。 - public Collection<String> getHeaders(String name);
如果在response响应头中,有使用add*Header()方法添加同名的header时,该方法会返回指定name对应的所有headder,以Collection形式返回。 - public Collection getHeaderNames();
获取response响应头中所有header的name的集合。 - response响应状态码的定义
在HttpServletResponse中定义了很多HTTP响应过程需要的状态码,因为状态码有很多,下面仅仅列举几个比较常用的响应状态码,如下所示:
/**
* Status code (100) indicating the client can continue.
*/
public static final int SC_CONTINUE = 100;
/**
* Status code (200) indicating the request succeeded normally.
*/
public static final int SC_OK = 200;
/**
* Status code (302) indicating that the resource has temporarily
* moved to another location, but that future references should
* still use the original URI to access the resource.
*
* This definition is being retained for backwards compatibility.
* SC_FOUND is now the preferred definition.
*/
public static final int SC_MOVED_TEMPORARILY = 302;
/**
* Status code (404) indicating that the requested resource is not
* available.
*/
public static final int SC_NOT_FOUND = 404;
/**
* Status code (500) indicating an error inside the HTTP server
* which prevented it from fulfilling the request.
*/
public static final int SC_INTERNAL_SERVER_ERROR = 500;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68842.html