Request
Request对象是由服务器tomcat所创建的,作用是获取请求信息。
功能
获取请求消息
1.获取请求行数据
*GET/day/demo1?name=zhangsan HTTP/1.1
方法
1.获取请求方法:GET
String getMethod()
2*.获取虚拟目录:/day
String getContextPath()
3.获取Servlet路径:/demo1
String getServletPath()
4.获取get方式请求参数:name=zhangsan
String getQueryString()
5*.获取请求URI:/day/demo1
String getRequestURI() :/day/demo1
StringBuffer getRequestURI() :http://localhost/day/demo1
URL:统一资源定位符http://localhost/day/demo1
URI:统一资源标识符/day/demo1
6.获取协议及版本: HTTP/1.1(范围更大)
String getProtocol()
7.获取客户机的IP地址
String getRemoteAddr()
2.获取请求头数据
String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration<String> getHeaderName():获取所有的请求头名称
3.获取请求体数据(只有POST请求方式,才有请求体
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream():获取字节输入流,可以操作所有类型的数据
其他功能
1.获取请求参数通用方式(不论post还是get都可以使用下列方法
String getParameter(String name):根据参数名称获取参数值
String[] getParameterValues(String name):根据参数名称获取参数值的数组
Enumeration<String> getParameterNmaes():获取所有请求的参数名称
Map<String,String[]> getParameterMap():获取所有参数的map集合
2.请求转发(一种在服务器内部的资源跳转方式)
1.步骤
1.通过request对象获取请求转发器对象:RequestDispacher getRequestDispacher(String path)
2.使用RequestDispacher对象来进行转发:forward(ServletRequest request,ServletResponse response)
2.特点
1.浏览器地址栏路径不发生变化
2.只能转发到当前浏览器内部资源中
3.转发是一次请求
3.共享数据
*域对象:一个有作用域的对象,可以在范围内共享数据
*request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
*方法:
1.coid setAttribute(String name,Object obj):存储数据
2.Object getAttribute(String name):通过键获取值
3.void removeAttribute(String name):通过键移除键值对
4.获取ServletContext
ServletContext getServletContext()
请求报文的内容
1.请求方法:常见的为POST/GET
2.请求URL
3.HTTP协议及版本
4.报文本:格式为“属性值:属性值”,获取客户端信息
5.报文体:将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。
response
获取请求消息
1.响应行数据
组成:协议/版本 响应状态码 状态码描述
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
*分类:
1.1xx:服务器接收客户端信息,但没有接收完成,等待一段时间,发送1xx状态码
2.2xx:成功
3.3xx:重定向。302(重定向),304(访问缓存)
4.4xx:客户端错误。404(请求路径没有对应的资源),405(请求方式没有对应的方法)
5.5xx:服务器端错误
2.响应头数据
组成:头名称:值
常见的响应头:
1.Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
2.Content-disposition:服务器告诉客户端以什么格式打开响应体数据
*值
in-line:默认值,在当前页面内打开
attachement;filename-xxx:以附件形式打开响应体。文件下载
3.响应空行数据
4.响应体数据
传输的数据
Response对象
1.设置响应行数据
设置状态码
setStatus(int sc);
完成重定向
response.sendRedirect(String path)
或者
response.setStatus(302);
response.setHeader(String s1,String s2);
2.设置响应头数据
setHeader(String name,String value);
3.设置响应体数据
使用步骤:
1.获取输出流
字符输出流:PrintWriter()
字节输出流:SerletOutputStream getOutputStream()
2.使用输出流,将数据输出到客户端浏览器
路径补充
1.相对路径:通过相对路径不可以确定唯一资源
以.开头
./:当期目录
../:后退一级目录
2.绝对路径:通过绝对路径可以确定唯一资源
以/开头
规则:
给客户端浏览器使用,需要加虚拟目录
*虚拟目录动态获取:request.getContextPath()
给服务器使用,不需要加虚拟目录,例如转发时
服务器输出字符流到浏览器
//简单的形式,设置编码,在获取流之前设置
resonse.setContentType("text/html;chasrset=utf-8");
printWriter pw=response.getWriter();
pw.write("你好");
服务器输出字节流到浏览器
resonse.setContentType("text/html;chasrset=utf-8");
ServletOutputStream sos=response.getOutputStream();
sos.write("你好".getBytes("utf-8"));