request对象和response原理:
*request和response对象由服务器创建
*request对象获取请求消息,response对象设置响应消息
request对象继承结构:
request对象功能:
获取请求行数据:
string getMethod(): 获取请求方式 GET
string getContextPath(): 获取虚拟目录 /day14
String getServletPath(): 获取Servlet路径 /demo1
String getQueryString(): 获取get方式的请求参数 name=zhangsan
URI: 统一资源定位符
URL:统一资源标识符
String getRequestURI(): /day14/demo1
StringBuffer getRequestURL(): http://localhost/day14/demo1
String getProtocol(): 获取协议及版本: HTTP/1.1
String getRemoteAddr(): 获取客户机的IP地址
获取请求头数据:
String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration<String>getHeaderNames():获取所有的请求头名称
遍历输出请求头
获取user-agent判断浏览器版本:
Chrome/Firefox
判断请求从哪里来:
如果直接访问返回null
防盗链:
获取请求体数据
获取流对象:
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
从流对象中拿数据:
获取请求参数通用方式:
get和post都可以用以下方法获取参数。
此时get和post没有区别,所以doGet和doPost方法的代码一样
在doGet中调用doPost方法即可
String getParameter(String name):根据参数名称获取参数值
String[] getParameter(String name):根据参数名称获取参数值的数组,用于复选框
Enumeration getParameterNames():获取所有请求的参数名称
Map<String,String[]>getParameterMap();获取所有参数的map集合
中文乱码问题:
*get方式:tomcat8已经将get方式乱码问题解决了
*post方式:设置流的编码(第一行)
请求转发:
一种在服务器内部的资源跳转方式
request.getRequestDispatcher("/转发资源路径").forword(request,response);
特点:
*浏览器地址栏路径不变
*只能访问服务器内部的资源
*转发是一次请求,多个资源使用同一个请求
共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
void setAttribute(String name,Object obj)存储数据
Object getAttribute(String name):通过键获取值
void removeAttribute(String name):通过值移除键值对
获取ServletContext:ServletContext getServletContext()