request的功能
-
获取请求行数据
GET/day14/demo?name=zhangsan HTTP/1
-
获取请求方式 :GET
String getMethod()
-
获取虚拟目录:/day14
String getContexPath()
-
获取servlet路径:/demo
String getServletPath()
-
获取get方式请求参数:name=zhangsan
String getQueryString()
-
获取请求的URI:/day14/demo
String getRequestURI(): // /day14/demo StringBuffer getRequestURL() : // http://localhost/day14/demo
-
获取协议以及版本:HTTP/1.1
String getProtocol()
-
获取客户机的 IP 地址
String getRemoteAddr()
-
-
获取请求头数据
方法:
-
String getHeader(String name):通过请求头的名称获得请求头的值
String agent = request.getHeader("user-agent"); if (agent.contains("Edge")){ System.out.println("IE"); }else if(agent.contains("Chrome")){ System.out.println("goole"); }
-
Enumberation getHeaderNames():通过 遍历获得 所有请求头的名称
Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()){ String name = headerNames.nextElement(); String header = request.getHeader(s); System.out.println(name+"---"+header); }
-
-
获取请求体数据
-
请求体:只有post请求方式才有请求体,在请求体中封装了post请求的请求参数
-
步骤
-
获取流对象
-
BufferedReader getReader():获取字符输入流
BufferedReader br = request.getReader(); String line = null; while ((line = br.readLine())!= null){ System.out.println(line); }
-
ServletInputStream getInputStream():获取字节码输入流,可以操作所有类型的数据
-
-
request的其他功能
-
获取请求参数的通用方式(不管是get还是post方法,都可兼容这四个方法来获取参数)
-
String getParameter(String name):根据参数名称获取参数值 username=zhangsan&password=mengihf
-
String[] getParameterValues(String name):根据参数名称获取参数值的数组
hobby=xxx&&hobby=yyy
<input type="checkbox" name="hobby" value="inter">上网 <input type="checkbox" name="hobby" value="gouout">逛街
String[] hobbies = request.getParameterValues("hobby"); for (String hobby:hobbies){ System.out.println(hobby); }
-
Enumeration getParameterNames():获取所有请求的参数名称
<form action="/mengxin" method="post"> <input name="username"> <input type="password" name="password"> <input type="checkbox" name="hobby" value="inter">上网 <input type="checkbox" name="hobby" value="gouout">逛街 <input type="submit" value="提交"> </form>
Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()){ System.out.println(parameterNames.nextElement()); }
运行结果:username password hobby
-
Map<String,String[]> getParameterMap():获取所有参数的map集合
<form action="/mengxin" method="post"> <input name="username"> <input type="password" name="password"> <input type="checkbox" name="hobby" value="inter">上网 <input type="checkbox" name="hobby" value="gouout">逛街 <input type="submit" value="提交"> </form>
-
Map<String, String[]> parameterMap = request.getParameterMap(); Set<String> keySet = parameterMap.keySet(); for (String name:keySet){ //获取键获取值 String[] values = parameterMap.get(name); System.out.println(name); for (String value : values) { System.out.println(value); } System.out.println("----------------"); }
运行结果:username zhangsan ---------------- password hgjgdh ---------------- hobby inter gouout ----------------
(客户端输入中文乱码问题:
- get方式下的乱码问题已经由tomcat解决
- post方式下的乱码问题解决:加上一行代码request.setCharacterEncoding(“utf-8”);)
-
-
请求转发:一种在服务器内部的资源跳转方式
- 步骤
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/路径");//1.通过request对象获得请求转发器对象 requestDispatcher.forward(request,resp);//使用RequestDispatcher对象来 进行转发
- 特点:
- 浏览器地址栏没有发生变化
- 只能转发到当前服务器内部资源
- 多个资源使用的是同一次请求
-
共享数据
-
域对象:一个有作用范围的对象,可以在范围内共享数据
-
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
-
方法:
void setAttribute(String name,Object obj)//1.存储数据 Object getAttribute(String name)//2.通过键获取值 void removeAttribute(String name)//3.通过键移除键值对
-
-
获取ServletContext
ServletContext servletContext = request.getServletContext(); System.out.println(servletContext);
-