Servlet学习笔记 – HttpServletRequest、HttpServletResponse

导读:本篇文章讲解 Servlet学习笔记 – HttpServletRequest、HttpServletResponse,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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中定义的认证相关方法:

  1. public String getAuthType();
    获取认证类型,即上面提到的Authentication类型。如果没有使用认证功能,就返回null。
  2. public Cookie[] getCookies();
    获取request中包含的所有缓存信息。
  3. public long getDateHeader(String name);
    获取请求头中指定name的时间类型的值,比如:“If-Modified-Since”。如果没有该变量,则返回“-1”,如果存在,但是不是时间类型的,则抛出IllegalArgumentException异常。
  4. String getHeader(String name);
    获取请求头中指定name的值。如果没有对应name,则返回null;如果存在多个同样name的header,则返回第一个。
  5. public Enumeration getHeaders(String name);
    返回请求头中指定name对应值的Enumeration集合,如果没有对应的name,则返回空的Enumeration集合。
  6. public Enumeration getHeaderNames();
    返回请求头中包括的所有header对应的name的Enumeration集合。
  7. public int getIntHeader(String name);
    获取请求头中指定name的int类型的值。如果不存在对应name,则返回-1,如果存在的name的值不是int类型的,就会抛出NumberFormatException异常。
  8. public String getMethod();
    获取当前request请求的方法名,比如Get、Post、Put等。
  9. public String getServletPath();
    获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括(后续通过例子来演示)。
  10. public String getPathInfo();
    与getServletPath()获取的路径互补,能够得到的是“url-pattern”中*的路径部分
  11. public String getPathTranslated();
    该方法获取URL中在Servlet 名称之后,在检索字符串之前的路径信息。
  12. public String getContextPath();
    和ServletContext.getContextPath()返回的一样,获取项目的根路径。
  13. public String getRequestURI();
    获取根路径到地址结尾
  14. public StringBuffer getRequestURL();
    获取请求的地址链接(浏览器中输入的地址)
  15. public String getQueryString();
    用来获取检索字符串。
  16. public String getRemoteUser();
    获取当前request请求中登录用户的名称。
  17. public boolean isUserInRole(String role);
    验证当前登录用户是否属于给定的角色。
  18. public java.security.Principal getUserPrincipal();
    获取当前用户的java.security.Principal对象,该对象一般会包括已经认证的用户名称。
  19. public String getRequestedSessionId();
    获取当前request请求的SessionID,该SessionID可以无效,所以一般和isRequestedSessionIdValid()方法一起使用。如果没有SessionID就会返回null。
  20. public HttpSession getSession(boolean create);
    获取当前request请求的HttpSession,如果没有HttpSession且create=true,就会创建一个新的HttpSession,否则就会返回null。
  21. public HttpSession getSession();
    相当于带参数的getSession()方法中,参数一致true。
  22. public String changeSessionId();
    改变当前请求对应的SessionId,如果不存在关联的Session,就会抛出IllegalStateException异常。
  23. public boolean isRequestedSessionIdValid();
    获取当前请求关联的SessionId是否有效。
  24. public boolean isRequestedSessionIdFromCookie();
    获取当前SessionId是否写进了Cookie中。
  25. public boolean isRequestedSessionIdFromURL();
    判断当前SessionId是否作为请求地址的一部分。
  26. public boolean authenticate(HttpServletResponse response) throws IOException,ServletException;
    验证当前响应信息中的用户信息是否已经认证过了。
  27. public void login(String username, String password) throws ServletException;
    验证用户名、密码是否正确。
  28. public void logout() throws ServletException;
    登出操作。
  29. public Collection getParts() throws IOException, ServletException;
    获取multipart/form-data类型的request请求中的所有附件内容。如果没有附件内容,就返回空的Collection对象;如果请求不是multipart/form-data类型类型的,就会抛出ServletException异常。
  30. public Part getPart(String name) throws IOException, ServletException;
    和getParts() 方法类似,不过这个方法是获取指定name的附件类型。
  31. public T upgrade(Class handlerClass) throws IOException, ServletException;
    预留的http协议的升级方法。
3、HttpServletResponse

  HttpServletResponse是HttpServletRequest的孪生兄弟,一般都是成对出现的,一个负责客户端的请求,一个负责客户端的响应。HttpServletResponse是继承于ServletResponse的接口,然后增加了一些HTTP协议的相关方法。和HttpServletRequest实例对象一样,Servlet容器在处理请求时,也会创建一个HttpServletResponse对象作为参数一起传递给service()方法,然后在转发给doXXX()方法。

HttpServletResponse接口中定义的方法:

  1. public void addCookie(Cookie cookie);
    添加Cookie信息,可以调用多次,即添加多个Cookie对象。
  2. public boolean containsHeader(String name);
    判断response响应头中是否包含指定name的header。
  3. public String encodeURL(String url);
    对URL进行编码。
  4. public String encodeRedirectURL(String url);
    和encodeURL()方法类似,不过这方法主要是编码那些供sendRedirect()方法使用的URL。
  5. public void sendError(int sc, String msg) throws IOException;
    发送错误信息到客户端,包括状态码和错误信息。如果在Web应用中,定义了错误页面,且和错误码匹配的话,就会返回错误的页面。
  6. public void sendError(int sc) throws IOException;
    和重载的sendError()方法,功能一样。
  7. public void sendRedirect(String location) throws IOException;
    执行跳转,跳转到location指定的路径或资源。
  8. public void setDateHeader(String name, long date);
    在response响应头中,添加时间类型的header。如果对应的name已经存在,就会覆盖原来的值。
  9. public void addDateHeader(String name, long date);
    和setDateHeader()方法类似,添加header,区别在于:这个方法可添加多个同名的header,而不是覆盖原有的header。
  10. public void setHeader(String name, String value);
    在response响应头中,添加header。如果对应的name已经存在,就会覆盖原来的值。
  11. public void addHeader(String name, String value);
    和setHeader()作用一样,区别在于:不限制同名的header。
  12. public void setIntHeader(String name, int value);
    在response响应头中,添加整型的header。如果对应的name已经存在,就会覆盖原来的值。
  13. public void addIntHeader(String name, int value);
    和setHeader()作用一样,区别在于:不限制同名的header。
  14. public void setStatus(int sc);
    设置response响应的错误码,但是该方法不会触发错误页面机制,即根据错误码返回指定页面。
  15. public int getStatus();
    获取当前response的响应码。
  16. public String getHeader(String name);
    获取response响应头中指定name的header。
  17. public Collection<String> getHeaders(String name);
    如果在response响应头中,有使用add*Header()方法添加同名的header时,该方法会返回指定name对应的所有headder,以Collection形式返回。
  18. public Collection getHeaderNames();
    获取response响应头中所有header的name的集合。
  19. 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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!