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中😶
1 2 3 4 5 6 7 8 9
| <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>
|
获取参数值(包括多个参数)
1 2 3 4 5 6 7 8 9 10 11 12 13
| @WebServlet("/HttpServletRequestTest") public class HttpServletRequestTest extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); System.out.println(username); String[] hobbies = req.getParameterValues("hobby"); System.out.println(Arrays.toString(hobbies)); } } }
|
获取所有参数名和参数值(使用getParameterNames)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @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串和文件等
1 2
| BufferedReader reader = req.getReader(); ServletInputStream inputStream = req.getInputStream();
|
请求体中存json串和文件一般用于文件上传,使用异步请求时可以测试这两个API🙂
其他API
| API |
说明 |
| String getServletPath() |
获取请求的Servlet的映射路径 |
| ServletContext getServletContext() |
获取ServletContext对象 |
| Cookie[] getCookies() |
获取请求中的所有cookie |
| HttpSession getSession() |
获取Session对象 |
| void setCharacterEncoding(String encoding) |
设置请求体字符集 |