最近好多人问我这两个啥区别,没想到有这么多不清楚。所以在这里简要说明下,如果我们点进去HttpServletRequest这个进去,发现这是一个接口,而且源码如下:
package javax.servlet.http;
import java.io.IOException;
import java.security.Principal;
import java.util.Collection;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
public interface HttpServletRequest extends ServletRequest {
String BASIC_AUTH = "BASIC";
String FORM_AUTH = "FORM";
String CLIENT_CERT_AUTH = "CLIENT_CERT";
String DIGEST_AUTH = "DIGEST";
String getAuthType();
Cookie[] getCookies();
long getDateHeader(String var1);
String getHeader(String var1);
Enumeration<String> getHeaders(String var1);
Enumeration<String> getHeaderNames();
int getIntHeader(String var1);
String getMethod();
String getPathInfo();
String getPathTranslated();
String getContextPath();
String getQueryString();
String getRemoteUser();
boolean isUserInRole(String var1);
Principal getUserPrincipal();
String getRequestedSessionId();
String getRequestURI();
StringBuffer getRequestURL();
String getServletPath();
HttpSession getSession(boolean var1);
HttpSession getSession();
String changeSessionId();
boolean isRequestedSessionIdValid();
boolean isRequestedSessionIdFromCookie();
boolean isRequestedSessionIdFromURL();
/** @deprecated */
boolean isRequestedSessionIdFromUrl();
boolean authenticate(HttpServletResponse var1) throws IOException, ServletException;
void login(String var1, String var2) throws ServletException;
void logout() throws ServletException;
Collection<Part> getParts() throws IOException, ServletException;
Part getPart(String var1) throws IOException, ServletException;
<T extends HttpUpgradeHandler> T upgrade(Class<T> var1) throws IOException, ServletException;
}
首先从该接口我们清楚知道这是servlet-api包下的,然后我们就要明白servlet-api是干嘛的,这个包是非jdk自带的官方扩展包,我们以前可能见过jdk自带的官方扩展类,如swing、sql、ssl等。而这个是非官方的,我们网上搜查servlet:
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
这里就知道servlet是javaweb开发过程必不可少的包,而且里面定义了java web开发api规范及简单接口实现,通过接口实现类查找,发现spring web开发里有不少实现,比如:MultipartHttpServletRequest,对应form表达里enctype=“multipart/form-data” 即文件上传,这里我们明白接收带有文件流的表单提交,而且tomcat的本身自带servlet。
所以在此可以简单下结论,Sevlet是提供一些web开发api接口,HttpServletRequest这个接口是让各大java web框架来实现它的功能的,springmvc struts等就有对其实现,而servlet本身就有对它扩展实现类HttpServletRequestWrapper,它是java web开发中接收前端请求重要的接口,web容器如tomcat接收到请求后会把请求列、请求头、请求体封装成HttpServletRequest传给servlet实例
## HttpRequest
我们搜下项目里用到的HttpRequest可能有好多,我搜到下面几个
我们从第一个点进去看发现它的实现类ClientHttpRequest这个RestTemplate,我们知道RestTemplate是spring提供的一个http请求工具,在spring cloud的ribbon就是基于此进行进行restfull服务调用,这里HttpRequest类是Http请求参数类接口,而下面的apache-http-client及jdk自带的sun包都是基于java net包的实现,表明都是用来进行http请求用的。netty的提供的是接收http协议的参数,为啥netty和servlet都是接收而不一样呢,主要netty是以tcp协议为基础的http协议封装。