Request
内容
- 请求头
- 请求参数 重点
- 域对象功能 重点
- 请求转发 重点
- 其他方法, 获取客户端信息, url相关的信息…
request作为域对象的功能
只在同一次请求内有效
获取请求头的方法
request与请求头相关的方法有:
- String getHeader(String name):获取指定名称的请求头;
- Enumeration getHeaderNames():获取所有请求头名称;
- int getIntHeader(String name):获取值为int类型的请求头。
其他方法
- int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
- String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
- String getMethod():返回请求方法,例如:GET
- Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
- String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;
void setCharacterEncoding(String code)
:设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效! 重点String getContextPath()
:返回上下文路径,例如:/helloString getQueryString()
:返回请求URL中的参数,例如:name=zhangSan- String getRequestURI():返回请求URI路径,例如:/hello/oneServlet
- StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;
- String getServletPath():返回Servlet路径,例如:/oneServlet
- String getRemoteAddr():返回当前客户端的IP地址;
- String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
- String getScheme():返回请求协议,例如:http;
- String getServerName():返回主机名,例如:localhost
- int getServerPort():返回服务器端口号,例如:8080
请求转发
动态资源(Servlet) 跳转到其他资源(Servlet, html, jsp…)
转发写法
-
RequestDispatcher getRequestDispatcher(String path) 得到转发器对象
-
调用RequestDispatcher对象的forward(request,response)
RequestDispatcher.forward(request,response);
1与2合并:
request.getRequestDispatcher(String path).forward(request,response);
转发特点:
- 只发起一次请求
- 客户端的url不会变
- 服务器端的转发, 只能转发到服务器内部资源
request域 一般就是在请求转发中使用
获取请求参数
方法1:String getParamter(String name) 根据name获取一个请求参数名对应的一个值
第一种情况: 前端传递请求参数名, 并且传递值
结果: 传递值
第二种情况: 前端传递请求参数名,没有传递值 username=&email=111
结果: “”
第三种情况: 前端没有传递请求参数名
结果: null
方法2:String[] getParameterValues(String name) 一个请求参数名对应多个值 例如获取复选框的取值
//一个请求参数名对应多个值
String[] love = request.getParameterValues("hobbyArr");//获取爱好(复选框)
//数组转换为集合
List<String> hobbyList = Arrays.asList(hobbyArr);
System.out.println("love:"+loveList);
//数组转换集合 Arrays.asList(arr)
//asList()这个方法返回的ArrayList不是集合体系中的ArrayList,是一个内部类ArrayList ,是只读的
hobbyList.add("唱歌");//出错!!!!!!
Arrays.asList()这个方法返回的ArrayList不是集合体系中的ArrayList,是一个内部类ArrayList ,是只读的
方法3:Map<String,String[]> getParameterMap() 获取所有的请求参数, 得到一个map集合 一般结合第三方jar, 把map转换为java对象
Map<String, String[]> parameterMap = request.getParameterMap();
遍历Map集合
1.先得到key集合 然后遍历key, 得到value 不推荐 2.得到EntrySet Entry(key/value键值对) 推荐
Map<String, String[]> parameterMap = request.getParameterMap();
Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
for (Map.Entry<String, String[]> entry : entries) {
System.out.println(entry.getKey() +"-->"+Arrays.asList(entry.getValue()));
}
浏览器缓存问题:
修改页面, 访问的时候,页面没有改, 可能是浏览器缓存问题
chrome: ctrl + F5 底层刷新
Response
内容
- 设置响应头
- 发送状态码
- 设置响应正文: 得到响应输出流,输出 重要
- 重定向 重要
设置响应头
- void setIntHeader(String name, int value) 设置响应头, 响应头的值int类型
- void addIntHeader(String name, int value)
- void addHeader(String name,String value) 设置响应头, 响应头的值String
- void setHeader(String name,String value)
- void setContentType(String )设置content-type的响应头