Servlet-HttpServletRequest
Servlet-HttpServletRequest
HttpServletResquest是一个接口,其父接口是ServletRequest
他是由Tomcat将请求报文转换封装而来的对象,在Tomcat调用service时传入
他代表着客户端发来的请求,所有请求中的信息都可以通过该对象获得
获取请求行信息相关(方式,请求的url,协议及版本)
API | 说明 |
---|---|
StringBuffer getRequestURL() | 获取客户端请求的URL |
String getRequestURL() | 获取客户端请求项目中的具体资源 |
String getRequestURI() | 获取客户端请求的URI |
int getServerPort() | 获取客户端发送请求时的端口 |
int getLocalPort() | 获取本应用所在容器的端口 |
int getRemotePort() | 获取客户端程序的端口 |
String getScheme() | 获取请求协议 |
String getProtocol() | 获取请求协议以及版本号 |
String getMethod() | 获取请求方式 |
URI与URL
URI:统一资源标识符
interface URI{}
资源定位的要求和规范
URL:统一资源定位符
class URL implements URI{}
一个具体的资源路径
获取请求头信息相关
API | 说明 |
---|---|
String getHeader(String headerName) | 根据头名称获取请求头 |
Emumeration<String> getHeaderNames() | 获取所有请求头名字 |
String ContentType() | 获取content-type请求头 |
获取请求参数相关
API | 说明 |
---|---|
String getParameter(String ParameterName) | 根据请求参数名获取请求单个参数值 |
String[] getParameterValues(String paramaterName) | 根据请求参数名获取请求多个参数值数组 |
Emumeration<String> getParameterNames() | 获取所有请求参数名 |
Map<String,String[]> getParameterMap() | 获取所有请求参数的键值对集合 |
BufferedReader getReader() throws IOException | 获取读取请求体的字符输入流 |
ServletInputStrem getInputStream() throws IOException | 获取读取请求体的字节输入流 |
int getContentLength() | 获得请求体长度的字节数 |
表单例子
使用API获取键值对参数时,无论这些参数在url后还是在请求体中
并不是说get就没有请求体,或者无法将参数放到请求体中,post也不是只能将参数放到请求体中,不能放到URI中😶
<form action="HttpServletRequestTest" method="get">
账号:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
篮球<input type="checkbox" name="hobby" value="篮球">
足球<input type="checkbox" name="hobby" value="足球">
羽毛球<input type="checkbox" name="hobby" value="羽毛球">
乒乓球<input type="checkbox" name="hobby" value="乒乓球">
<input type="submit" value="提交">
</form>
获取参数值(包括多个参数)
@WebServlet("/HttpServletRequestTest")
public class HttpServletRequestTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//根据key获取value
String username = req.getParameter("username");
System.out.println(username);
//根据key获取多个value(比如多选框)
String[] hobbies = req.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
}
}
}
获取所有参数名和参数值(使用getParameterNames)
@WebServlet("/HttpServletRequestTest")
public class HttpServletRequestTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
String parameterName = parameterNames.nextElement();
String[] parameter = req.getParameterValues(parameterName);
if (parameter.length > 1) {
System.out.println(parameterName + ":" + Arrays.toString(parameter));
} else {
System.out.println(parameterName + ":" + parameter[0]);
}
}
}
}
获取所有参数名和参数值(使用getParameterMap)
@WebServlet("/HttpServletRequestTest")
public class HttpServletRequestTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Map<String, String[]> parameterMap = req.getParameterMap();
for (Map.Entry<String, String[]> stringEntry : parameterMap.entrySet()) {
String key = stringEntry.getKey();
String[] value = stringEntry.getValue();
if (value.length > 1) {
System.out.println(key + ":" + Arrays.toString(value));
} else {
System.out.println(key + ":" + value[0]);
}
}
}
}
获取请求体中非键值对的内容
请求体中还会存放一些其他内容,比如json串和文件等
BufferedReader reader = req.getReader();//从请求体获得一个字符输入流来读取json串
ServletInputStream inputStream = req.getInputStream();//从请求体中获得一个字节输入流来读取文件
请求体中存json串和文件一般用于文件上传,使用异步请求时可以测试这两个API🙂
其他API
API | 说明 |
---|---|
String getServletPath() | 获取请求的Servlet的映射路径 |
ServletContext getServletContext() | 获取ServletContext对象 |
Cookie[] getCookies() | 获取请求中的所有cookie |
HttpSession getSession() | 获取Session对象 |
void setCharacterEncoding(String encoding) | 设置请求体字符集 |