10.request和response
来源:互联网 发布:网络育人工作心得体会 编辑:程序博客网 时间:2024/05/22 20:42
1. response
- 作用:往浏览器写东西
- 组成部分:响应行 响应头 响应体
1.1 操作响应行
格式:协议/版本 状态码 状态码说明
状态码:
1xx:已发送请求2xx:已完成响应 200:正常响应3xx:还需浏览器进一步操作 302:重定向 配合响应头:location 304:读缓存4xx:用户操作错误 404:用户操作错误. 405:访问的方法不存在5xx:服务器错误 500:内部异常
常用方法:
setStatus(int 状态码):针对于 1 2 3 sendError(int 状态码):针对于 4xx和5xx
1.2 操作响应头
格式:key/value(value可以是多个值)
1.2.1 常用的方法:
setHeader(String key,String value):设置字符串形式的响应头了解:setIntHeader(String key,int value):设值整形的响应头了解:setDateHeader(String key,long value):设值时间的响应头addHeader(String key,String value):添加置字符串形式的响应头 之前设置过则追加,若没有设置过则设置了解:addIntHeader(String key,int value):添加整形的响应头了解:addDateHeader(String key,long value):添加时间的响应头
1.2.2 常用的响应头:
- location:重定向
- refresh:定时刷新
- content-type:设置文件的mime类型,设置响应流的编码及告诉浏览器用什么编码打开
- content-disposition:文件下载
重定向:
方式1: ★response.sendRedirect("/day10/loc2");方式2: response.setStatus(302); respooen.setHeader("location","/day10/loc2");
定时刷新:
方案1:设置头 refresh respooen.setHeader("refresh","秒数;url=跳转的路径");方案2:http的meta标签 <meta http-equiv="refresh" content="3;url=/day10/refresh2.html">
1.3 操作响应体:页面上要展示的内容
1.3.1 常用方法:
Writer getWriter():字符流ServletOutputStream getOutputStream() :字节流自己写的东西用字符流,其他一概用字节流.
1.3.2 处理响应中文乱码:
方式1:★ response.setContentType("text/html;charset=utf-8");方式2:理解 response.setHeader("content-type", "text/html;charset=utf-8");
注意:
两个流互斥当响应完成之后,服务器会判断一下流是否已经关闭,若没有关闭,服务器会帮我们关闭.(底层使用的缓冲流)
文件下载
设置文件的mime类型
String mimeType=context.getMimeType(文件名)response.setContentType(mimeType);
设置下载头信息 content-disposition
response.setHeader("content-disposition", "attachment;filename="+文件名);
提供流
response.getOutputStream();
文件名乱码
String filename = request.getParameter("name");filename = new String(filename.getBytes("iso8859-1"), "utf-8");
扩展:使用commons-io工具类
//方式3 使用工具类编码 String _filename = DownLoadUtils.getName(request.getHeader("user-agent"), filename); response.setHeader("content-disposition","attachment;filename="+_filename );
对拷流:IOUtils.copy(is,os);
实例代码
String filename = request.getParameter("name");//注意中文乱码filename = new String(filename.getBytes("iso8859-1"), "utf-8");ServletContext context = this.getServletContext();context.getMimeType(filename);InputStream is = context.getResourceAsStream("/download/"+filename);//获取输出流 ServletOutputStream os = response.getOutputStream();IOUtils.copy(is,os);os.close();is.close();
2. request(请求)
- 作用:获取浏览器发送过来的数据
- 组成部分:请求行 请求头 请求体
2.1 操作请求行
- 格式:请求方式 请求资源 协议/版本
2.1.1 常用方法:HttpServletRequest
掌握 String getMethod():获取请求方式 String getRemoteAddr():获取ip地址 String getContextPath() :在java中获取项目名称 (/day10)了解: getRequestURI():获取的是 从项目名到参数之前的内容 /day10/regist getRequestURL():获取的带协议的完整路径 http://localhost/day10/regist String getQueryString():get请求的所有参数 username=tom&password=123 String getProtocol():获取协议和版本例如:请求行GET /day10/row?username=tom&password=123 HTTP/1.1
2.2 操作请求头
- 格式:key/value(value可以是多个值)
2.2.1 常用方法:
String getHeader(String key):通过key获取指定的value (一个)了解: Enumeration getHeaders(String name) :通过key获取指定的value(多个) Enumeration getHeaderNames() :获取所有的请求头的名称 int getIntHeader(String key):获取整型的请求头 long getDateHeader(String key):获取时间的请求头
2.2.2 重要的请求头:
user-agent:浏览器内核 msie firefox chromereferer:页面从那里来 防盗链
2.3 操作请求参数
username=tom&password=123&hobby=drink&hobby=sleep
2.4 常用方法:
String getParameter(String key):获取一个值String[] getParameterValues(String key):通过一个key获取多个值Map<String,String[]> getParameterMap():获取所有的参数名称和值
2.3 请求的中文乱码:
- 对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
- 对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码
2.3.1 通用的方法:
new String(参数.getBytes("iso-8859-1"),"utf-8");针对于post请求来说:只需要将请求流的编码设置成utf-8即可 request.setCharacterEncoding("utf-8");
处理中文响应乱码
response.setContentType("text/html;charset=utf-8");
3. 域对象:
3.1 request:
- 创建:一次请求来的时候
- 销毁:响应生成的时候
- 作用:一次请求里面的数据
请求转发(请求链,请求串)
request.getRequestDispatcher("内部路径").forward(request,response);
4. 封装对象:apache提供的一个工具类,BeanUtils
- 封装数据
使用步骤:
- 导入jar包(commons-beanutils-1.8.3.jar)
调用 BeanUtils.populate(Object bean,Map<> 参数);
BeanUtils.populate(user, request.getParameterMap());
请求转发和重定向区别:
重定向发送两次请求,请求转发一次请求
重定向地址栏发生改变,请求转发不变
重定向是从浏览器发送,请求转发是服务器内部
重定向不存在request域对象,请求转发可以使用request域对象
重定向是response的方法,请求转发是request的方法
重定向可以请求站外资源,请求转发不可以,如跳转到银行页面
request.getRequestDispatcher("/内部路径").forward(request,response);
阅读全文
0 0
- 10.request和response
- Request和Response对象
- Response和Request
- Request和Response对象
- request和response对象
- Request和Response
- response和request类
- C# Response 和 Request
- response和request
- Request和Response
- Request和Response详解
- Request和Response对象
- request和response学习
- request 和 response
- request和response
- Request和Response
- Request和Response
- Request和Response
- unity3D新建项目无限读条怎么解决
- 三点顺序
- poj3281 dining 网络流最大流算法
- chrome调试的JavaScript官方技巧
- Android 获取手机基本信息,版本号,制造商,
- 10.request和response
- char* 、 字符串字面值、char数组
- poj3280
- Scrollview嵌套RecyclerView高度显示不全
- ORACLE startup报错之ORA-01261&&ORA-01263&&ORA-00202&&ORA-00205
- JS用submit()提交表单发生错误
- 二叉树的递归与非递归遍历(前序、中序、后序)
- Longest Ordered Subsequence【POJ 2533 dp 最长不降子序列】
- 顺序表应用2:多余元素删除之建表算法