Servlet--HttpServletRequest接口,HttpServletResponse接口

2024-06-17 11:48

本文主要是介绍Servlet--HttpServletRequest接口,HttpServletResponse接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • HttpServletRequest接口
定义
public interface HttpServletRequest extends ServletRequest;

用来处理一个对 Servlet 的 HTTP 格式的请求信息。


方法
1、getAuthType
public String getAuthType();
返回这个请求的身份验证模式。
2、getCookies
public Cookie[] getCookies();
返回一个数组, 该数组包含这个请求中当前的所有 cookie。 如果这个请求中没有 cookie ,返回一个空数组。
3、getDateHeader
public long getDateHeader(String name);
返回指定的请求头域的值,这个值被转换成一个反映自 1970-1-1 日(GMT)以来的精确到毫秒的长整数。如果头域不能转换,抛出一个 IllegalArgumentException。如果这个请求头域不存在,这个方法返回-1。
4、getHeader
public String getHeader(String name);
返回一个请求头域的值。 (注意:与上一个方法不同的是,该方法返回一个字符串)如果这个请求头域不存在,这个方法返回-1。
5、getHeaderNames
public Enumeration getHeaderNames();
该方法返回一个 String 对象的列表,该列表反映请求的所有头域名。有的引擎可能不允许通过这种方法访问头域, 在这种情况下, 这个方法返回一个空的列表。
6、getIntHeader
public int getIntHeader(String name);
返回指定的请求头域的值,这个值被转换成一个整数。如果头域不能转换,抛出一个 IllegalArgumentException。如果这个请求头域不存在,这个方法返回-1。
7、getMethod
public String getMethod();
返回这个请求使用的 HTTP 方法(例如:GET、POST、PUT)
8、getPathInfo
public String getPathInfo();
这个方法返回在这个请求的 URL 的 Servlet 路径之后的请求 URL 的额外的路径信息。如果这个请求 URL 包括一个查询字符串, 在返回值内将不包括这个 查询字符串。 这个路径在返回之前必须经过 URL 解码。 如果在这个请求的 URL 的 Servlet 路径之后没有路径信息 。这个方法返回空值。
9、getPathTranslated
public String getPathTranslated();
这个方法获得这个请求的 URL 的 Servlet 路径之后的额外的路径信息, 并将它转换成一个真实的路径。在进行转换前,这个请求的 URL 必须经过 URL 解码。如果在这个 URL 的Servlet 路径之后没有附加路径信息。这个方法返回空值。
10、getQueryString
public String getQueryString();
返回这个请求 URL 所包含的查询字符串。一个查询字串符在一个 URL 中由一个“?”引出。如果没有查询字符串,这个方法返回空值。
11、getRemoteUser
public String getRemoteUser
返回作了请求的用户名,这个信息用来作 HTTP 用户论证。如果在请求中没有用户名信息,这个方法返回空值。
12、getRequestedSessionId
public String getRequestedSessionId();
返回这个请求相应的 session id。如果由于某种原因客户端提供的 session id 是无效的,这个 session id 将与在当前 session 中的 session id 不同,与此同时,将建立一个新的 session 。如果这个请求没与一个 session 关联,这个方法返回空值。
13、getRequestURI
public String getRequestURI();
从 HTTP 请求的第一行返回请求的 URL 中定义被请求的资源的部分。如果有一个查询字符 串存在 ,这个 查询字 符串将 不包括 在返回 值当中 。例如 ,一个 请求通过/catalog/books?id=1 这样的 URL 路径访问,这个方法将返回/catalog/books。这个方法的返回值包括了 Servlet 路径 和路径信息。如果这个 URL 路径中的的一部分经过了 URL 编码, 这个方法的返回值在返回之前必须经过解码。
14、getServletPath
public String getServletPath();
这个方法返回请求 URL 反映调用 Servlet 的部分。例如,一个 Servlet 被映射到/catalog/summer 这个 URL 路径,而一个请求使用 了/catalog/summer/casual 这样的路径。所谓的反映调用 Servlet 的部分就是指/catalog/summer。如果这个 Servlet 不是通过路径匹配来调用。这个方法将返回一个空值。
15、getSession
public HttpSession getSession();
public HttpSession getSession(boolean create);
返回与这个请求关联的当前的有效的 session。如果调用这个方法时没带参数,那么在没有 session 与这个请求关联的情况下,将会新建一个 session。如果调用这个方法时带入了一个布尔型的参数,只有当这个参数为真时,session 才会被建立。为了确保 session 能够被完全维持。Servlet 开发者必须在响应被提交之前调用该方法。如果带入的参数为假,而且没有 session 与这个请求关联。这个方法会返回空值。
16、isRequestedSessionIdValid
public boolean isRequestedSessionIdValid();
这个方法检查与此请求关联的 session 当前是不是有效。如果当前请求中使用的 session无效,它将不能通过 getSession 方法返回。
17、isRequestedSessionIdFromCookie
public boolean isRequestedSessionIdFromCookie();
如果这个请求的 session id 是通过客户端的一个 cookie 提供的,该方法返回真,否则返回假。
18、isRequestedSessionIdFromURL
public boolean isRequestedSessionIdFromURL();
如果这个请求的 session id 是通过客户端的 URL 的一部分提供的,该方法返回真,否则返回假。请注意此方法与isRequestedSessionIdFromUrl 在 URL 的拼写上不同。
以下方法将被取消。
19、isRequestedSessionIdFromUrl
public boolean isRequestedSessionIdFromUrl();
该方法被 isRequestedSessionIdFromURL 代替。

  • HttpServletResponse 类
定义
public interface HttpServletResponse extends ServletResponse
描述一个返回到客户端的 HTTP 回应。这个接口允许 Servlet 程序员利用 HTTP 协议规定的头信息。
成员变量
public static final int SC_CONTINUE = 100;
public static final int SC_SWITCHING_PROTOCOLS= 101;
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;
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_SEE_OTHER = 303;
public static final int SC_NOT_MODIFIED = 304;
public static final int SC_USE_PROXY = 305;
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;
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;
public static final int SC_UNSUPPORTED_MEDIA_TYPE= 415;
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;
public static final int SC_GATEWAY_TIMEOUT = 504;
public static final int SC_HTTP_VERSION_NOT_SUPPORTED= 505;
以上 HTTP 产状态码是由 HTTP/1.1 定义的。
方法
1、addCookie
public void addCookie(Cookiecookie);
在响应中增加一个指定的 cookie。可多次调用该方法以定义多个 cookie。为了设置适当的头域,该方法应该在响应被提交之前调用。
2、containsHeader
public boolean containsHeader(String name);
检查是否设置了指定的响应头。
3、encodeRedirectURL
public String encodeRedirectURL(String url);
对sendRedirect方法使用的指定URL进行编码。 如果不需要编码, 就直接返回这个URL 。之所以提供这个附加的编码方法,是因为在 redirect 的情况下,决定是否对 URL 进行编码的规则和一般情况有所不同。所给的 URL 必须是一个绝对 URL。相对 URL 不能被接收,会抛出一个 IllegalArgumentException。所有提供给 sendRedirect 方法的 URL 都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。
4、encodeURL
public String encodeURL(String url);
对包含 session ID 的 URL 进行编码。如果不需要编码,就直接返回这个 URL。Servlet引擎必须提供 URL 编码方法,因为在有些情况下,我 们将不得不重写 URL,例如,在响应对应的请求中包含一个有效的 session,但是这个 session 不能被非 URL 的(例如 cookie )的手段来维 持。所有提供给 Servlet 的 URL 都应通过这个方法运行, 这样才能确保会话跟踪能够在所有
浏览器中正常运行。
5、sendError
public void sendError(int statusCode) throws IOException;
public void sendError(int statusCode, String message) throws
IOException;
用给定的状态码发给客户端一个错误响应。如果提供了一个 message 参数,这将作为响应体的一部分被发出,否则,服务器会返回错误代码所对应的标准信息。调用这个方法后,响应立即被提交。在调用这个方法后,Servlet 不会再有更多的输出 。
6、sendRedirect
public void sendRedirect(String location) throws IOException;

使用给定的路径,给客户端发出一个临时转向的响应(SC_MOVED_TEMPORARILY )。给 定 的 路 径 必 须 是 绝 对 URL 。 相 对 URL 将 不 能 被 接 收 , 会 抛 出 一 个IllegalArgumentException。这个方法必须在响应被提交之前调用。调用这个方法后,响应立即被提交。在调用这个方法后,Servlet 不会再有更多的输出。


这个方法很有必要说一下,注意了这里接口里面说明的是:一定要是绝对路径。

但是在实际开发中,我们既可以写相对路径,也可以写绝对路径,这是为什么呢?

打开tomcat里面response的源码一看就明白了:

public void sendRedirect(String location) throws IOException {if (isCommitted())throw new IllegalStateException(sm.getString("coyoteResponse.sendRedirect.ise"));// Ignore any call from an included servletif (included)return; // Clear any data content that has been bufferedresetBuffer();// Generate a temporary redirect to the specified locationtry {String absolute = toAbsolute(location);setStatus(SC_FOUND);setHeader("Location", absolute);} catch (IllegalArgumentException e) {setStatus(SC_NOT_FOUND);}// Cause the response to be finished (from the application perspective)setSuspended(true);}

 /*** Convert (if necessary) and return the absolute URL that represents the* resource referenced by this possibly relative URL.  If this URL is* already absolute, return it unchanged.** @param location URL to be (possibly) converted and then returned** @exception IllegalArgumentException if a MalformedURLException is*  thrown when converting the relative URL to an absolute one*/private String toAbsolute(String location) {if (location == null)return (location);boolean leadingSlash = location.startsWith("/");if (leadingSlash || !hasScheme(location)) {redirectURLCC.recycle();String scheme = request.getScheme();String name = request.getServerName();int port = request.getServerPort();try {redirectURLCC.append(scheme, 0, scheme.length());redirectURLCC.append("://", 0, 3);redirectURLCC.append(name, 0, name.length());if ((scheme.equals("http") && port != 80)|| (scheme.equals("https") && port != 443)) {redirectURLCC.append(':');String portS = port + "";redirectURLCC.append(portS, 0, portS.length());}if (!leadingSlash) {String relativePath = request.getDecodedRequestURI();int pos = relativePath.lastIndexOf('/');relativePath = relativePath.substring(0, pos);String encodedURI = null;final String frelativePath = relativePath;if (SecurityUtil.isPackageProtectionEnabled() ){try{encodedURI = (String)AccessController.doPrivileged( new PrivilegedExceptionAction(){                                public Object run() throws IOException{return urlEncoder.encodeURL(frelativePath);}});   } catch (PrivilegedActionException pae){IllegalArgumentException iae =new IllegalArgumentException(location);iae.initCause(pae.getException());throw iae;}} else {encodedURI = urlEncoder.encodeURL(relativePath);}redirectURLCC.append(encodedURI, 0, encodedURI.length());redirectURLCC.append('/');}redirectURLCC.append(location, 0, location.length());} catch (IOException e) {IllegalArgumentException iae =new IllegalArgumentException(location);iae.initCause(e);throw iae;}return redirectURLCC.toString();} else {return (location);}}

7、setDateHeader

public void setDateHeader(String name, long date);
用一个给定的名称和日期值设置响应头,这里的日期值应该是反映自 1970-1-1 日(GMT)以来的精确到毫秒的长整数。如果响应头已经被设置,新的值将覆盖当前的值。
8、setHeader
public void setHeader(String name, String value);
用一个给定的名称和域设置响应头。如果响应头已经被设置,新的值将覆盖当前的值。
9、setIntHeader
public void setIntHeader(String name, int value);
用一个给定的名称和整形值设置响应头。 如果响应头已经被设置, 新的值将覆盖当前的值。
10、setStatus
public void setStatus(int statusCode);
这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值。以下的几个方法将被取消\
11、encodeRedirectUrl
public String encodeRedirectUrl(String url);
该方法被 encodeRedirectURL取代。
12、encodeUrl
public String encodeUrl(String url);
该方法被 encodeURL 取代。
13、setStatus
public void setStatus(int statusCode, String message);
这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值。如果提供了一个 message,它也将会被作为响应体的一部分被发送。

这篇关于Servlet--HttpServletRequest接口,HttpServletResponse接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069363

相关文章

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

linux常用API接口

linux常用API接口 文章目录 linux常用API接口1.应用层内存映射mmap取消内存映射munmap终端打印可用方式1.puts 函数2.文件操作函数 fprintf3.字符输出函数 putchar4.fwrite 函数 2.内核层 1.应用层 内存映射mmap mmap 是一个用于内存映射的系统调用,它可以将一个文件或设备中的内容映射到进程的地址空间中,允许程

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         最近学习mcu的时候,接触了不少调试器,这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样,但是硬件的连线都差不多,都是mcu上的3.3v、clk、dio和gnd四根连线。出于好奇,今天花了点时间了解了一下debug port、sw

【架构设计】模块化-面向接口编程

模块化的优势 结构清晰:业务独立,代码实现分离便于协作:耦合度低,不会影响团队其他成员的开发进度便于维护:各模块管理自身代码、布局、资源,不影响主工程 模块化的特点 高内聚,低耦合 常见的模块化方法 所有模块都放在一个工程里实现每个模块都放在一个独立工程中实现 模块的划分 从高到低 业务层平台能力层基础层 模块间的通信 直接依赖事件或广播通信路由通信面向接口通信 具体实现

使用ig507金融数据库的股票API接口经验有感:Java与Python

一、Java技术: 1. Java调用ig507金融数据库(ig507.com)股票API接口 引言: 随着金融科技的不断发展,数据驱动的投资策略变得越来越重要。本文将介绍如何使用Java语言调用ig507金融数据库的股票API接口,以获取实时股票数据,并展示基本的编程步骤和注意事项。 步骤一:引入依赖库 在Java项目中,首先需要引入用于处理HTTP请求和网络通信的库,如Apache

接口与实现-常用实用类-Java

接口与实现 接口 使用关键字interface来定义一个接口,接口的定义分为接口声明和接口体,例如: interface Com{ ....... } 接口声明 interface 接口的名字 接口体 接口体中的抽象方法和常量 接口体中所有抽象方法的访问权限一定都是public,而且允许省略抽象方法的public和abstract修饰符,接口体中所有static常量的访问权限一定

抽象类和接口之间的关系

1。类可以实现多个接口而只能继承一个超类。 2。抽象类可以有非抽象方法而接口的方法只能都是抽象的。 3。抽象类可以定义和使用变量而接口则不可以。 4。抽象类中的方法可以有各种不同的修饰符,而接口中的方法默认都是public,不允许字面定修饰符。 一个接口中的成员函数可以在不同的类中安装,而它的成员函数可以有很多种的实现方法,但是抽象类却不能象这样,它必须是由子类来继承,然后由子类来实现它的

玩转Web之servlet(三)---一张图看懂B/S架构

学WEB, 首先 要明白B/S架构,本文将简单说一下小编的愚见,若有不当,欢迎大家指正。 首先,什么是B/S架构?B/S是Broweser/Server的缩写,即浏览器/服务器模式,简单说就是客户端使用浏览器,服务端使用Web服务器,客户端与服务端之间使用http协议进行通讯。 那么,为什么要使用B/S架构呢?当然是其有一定的优点:           1.传统的C/S架构 需要单独安装客户

注解+Aspect 省时省力的管理好接口日志

背景 无论是对外提供的RPC接口,还是项目内的普通方法,我们都会有需要打印方法入参、出参的需求,方便在遇到问题时通过查看日志快速定位,我们也会需要对方法的执行时间进行打印 方便分析和调优。 比较笨的做法就是在每个需要打印日志的地方使用log.info对参数进行打印,在每个方法内部方法体前后获取系统时间 在最后打印时间差 但这种对方法自身业务逻辑没有什么意义的的代码 侵入性太强 编写时也浪费时间