servlet中的request和response
request对象
1.什么是请求
a.浏览器向服务器发送数据就是请求。
一.request功能1--获取数据
1.获取浏览器相关的信息
getRequestURL方法 -- 返回客户端发出请求完整URL
getRequestURI方法 -- 返回请求行中的资源名部分
getQueryString方法 -- 返回请求行中的参数部分
getRemoteAddr方法 -- 返回发出请求的客户机的IP地址
getMethod -- 得到客户机请求方式
!!getContextPath -- 获得当前web应用虚拟目录名称 -- 在写路径时不要将web应用的虚拟路径的名称写死, 应该在需要写web应用的名称的地方通过getContextPath方法动态获取
String path = request.getContextPath();
2.获取请求头信息
getHeader(name)方法 --- String
getHeaders(String name)方法 --- Enumeration<String>
getHeaderNames方法 --- Enumeration<String>
Enumeration<String> headers = request.getHeaders("host");
eg: while(headers.hasMoreElements()){
String head = headers.nextElement();
System.out.println("head:"+head);
}
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headname = (String) headerNames.nextElement();
String value = request.getHeader(headname);
System.out.println("headname:"+headname+"<>>>value:"+value);
}
3.获取请求参数
getParameter(String name) --- String 通过name获得值
getParameterValues(String name) --- String[ ] 通过name获得多值checkbox----》》System.out.println(Arrays.toString(likes));
getParameterMap() --- Map<String,String[ ]> key :name value: 多值 将查询的参数保存在一个Map中
getParameterNames() --- Enumeration<String> 获得所有name》》》
》》》》》》》》》eg:
Map<String,String[]> map = request.getParameterMap();
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
//根据请求参数的名称获取对应请求参数名的值
String[] value = request.getParameterValues(name);
System.out.println("name:"+name+">>>value:"+Arrays.toString(value));
}
a.GET提交乱码处理
String username = request.getParameter("username"); //1.处理"?":
//使用iso8859-1编码
byte bytes[] = username.getBytes("iso8859-1");
//2.将编码后的二进制数据解码
//解码时使用utf-8
username = new String(bytes,"utf-8"); System.out.println("username:"+username);
此种方式在面对get,post提交方式都可以解决乱码
b.POST提交乱码处理:使用request.setCharacterEncoding("utf-8");
二.request功能2--请求转发 (web应用内部,地址栏不发生变化)
- 请求转发的实现请求转发中的细节问题
- 创建一个调度器------在RequestDemo4里面RequestDispatcher dis = request.getRequestDispatcher("/servlet/RequestDemo5");
- 利用调度器实现请求转发-------dis.forward(request, response);
a. 在请求转发之前,是不允许进行响应操作,如果强行冲刷缓冲区实现相应操作,则会抛出异常,导致程序无法运行。
冲刷缓冲区:response.flushBuffer();
b.在请求转发之前,response缓冲区中的内容会被清空一次,这些被清空的内容无法携带至下一个请求的servlet,也就无法在页面中展示。
c.请求转发就是一条普通的语句,和其他代码一样都可以按照顺讯正常执行。
d.在请求转发过程中允许多重转发,但是不允许在同一个servlet中多次转发。
三.request功能3--请求包含 (web应用内部,地址栏不发生变化)
RequestDispatcher dis = request.getRequestDispatcher("/servlet/RequestDemo10");
dis.include(request, response);//RequestDemo9包含10输出
四.request功能4--请求包含
一个对象具有一个可以被看见的范围,在这个范围内可以实现资源的共享,在这个对象身上具有一个map,可以通过这个map进行数据的存取操作。
a.域对象身上的api:
setAttribute |
设置域属性 |
getAttribute |
获取域属性 |
removeAttribute |
删除域属性 |
getAttributeNames |
获取所有域属性的名称 |
eg:l利用功能2实现跳转到JSP页面
request.getRequestDispatcher("/index.jsp").forward(request, response);
<body>
姓名:<%= request.getAttribute("name") %>
年龄:<%= request.getAttribute("age") %>
</body>
b.生命周期:一次请求开始请求对象产生,一次请求结束请求对象消亡
c.作用范围整个请求链就是request的作用范围。
d.主要功能:在整个请求链中实现资源的共享。
response对象
向浏览器发送数据
乱码处理
getOutputStream()
getWriter()
1)字节流
//发送数据使用的是工程的字符集gbk,浏览器解码数据使用的也是 gbk,所以不会出现乱码。
response.getOutputStream().write("中国".getBytes());
//通过设置响应头去通知浏览器使用utf-8字符集接收数据。应该在发送数据之前设置。
response.setHeader("Content-type", "text/html;charset=utf-8"); response.getOutputStream().write("中国".getBytes("utf-8"));
2)字符流
字符流在发送到浏览器的过程中,仍然是以字节流的形式进行发送,这时会调用服务器中默认的字符集来发送,会使用iso8859-1。
通知服务器使用utf-8字符集发送数据。
response.setCharacterEncoding("utf-8");
通知浏览器使用utf-8字符集接收数据
response.setHeader("Content-type", "text/html;charset=utf-8");
3) 单独书写词句也可是实现响应数据中的乱码处理在通知浏览器的过程中,服务器会自动读取通知浏览器使用的字符集,进而使用读取到的字符集发送数据。
response.setContentType("text/html;charset=utf-8");
<==>
response.setHeader("Content-type","text/html;charset=utf-8");
4)不论是字节流还是字符流,都可以通过通知浏览器使用utf-8的方式解决乱码问题。
注意:response中字节流和字符流不可以同时使用。
注意:getOutputStream和getWriter两个流,不需要用户手动关闭,如果手动关闭可能会出现异常。
注意:response对象不是直接向浏览器输出数据,而是将数据先存储在
response缓冲区中,再组织称一定结构才发送到了浏览器。
一.response实现重新定向
原理:
302状态码+location响应头来实现
response.setStatus(302);
response.setHeader("location","http://www.baidu.com")
也可以简写成response.sendRedirect("http://www.baidu.com")
response.sendRedirect(request.getContextPath()+"/servlet/ResponseDemo2");
特点:
1.两次响应两次请求
2.两个请求对象和两个响应对象。服务器之间的资源跳转。浏览器地址会发生变化
二.response实现定时刷新
原理:设置一个响应头,其中需要设置两部分内容
a.设置一个秒值
b.设置一个刷新后跳转的地址。
实现:
response.setHead(“refresh“,”3;url=http://www.tmooc.cn");
特点:
1.两次请求两次响应
2.两个请求对象和两个响应对象,服务器之间的资源跳转。浏览器地址会发生变化
servlet中的request和response的更多相关文章
- JavaWeb(一)Servlet中的request与response
一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...
- Servlet中的request与response
了解这方面的知识可以查看以下博客 https://www.cnblogs.com/zhangyinhua/p/7629221.html https://www.cnblogs.com/zhaojian ...
- JSP Servlet中的Request和Response的简单研究
本文参考了几篇文章所得,参考目录如下: 1.http://www.cnblogs.com/guangshan/p/4198418.html 2.http://www.iteye.com/problem ...
- 【转载】Servlet中的request与response
一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时, ...
- struts2中获取request、response,与android客户端进行交互(文件传递给客户端)
用struts2作为服务器框架,与android客户端进行交互需要得到request.response对象. struts2中获取request.response有两种方法. 第一种:利用Servle ...
- 此时servlet中的request和我们在页面jsp中的request 是同一个request.
在tomcat容器启动的时候,jsp页面的内置对象request,response,同样是依赖于tomcat容器中的servlet-api.jar包,这个jar包和我们在web项目中的jar包是一样的 ...
- springMVC中获取request和response对象的几种方式(RequestContextHolder)
springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...
- LoadRunner中取Request、Response
LoadRunner中取Request.Response LoadRunner两个“内置变量”: 1.REQUEST,用于提取完整的请求头信息. 2.RESPONSE,用于提取完整的响应头信息. 响应 ...
- Django中的Request和Response
接触Django这么久了,从来没有好好学习关于Django中的Request和Response对象.借着文件上传下载的相关工作,现在总结一下也不错. 当一个页面请求过来,Django会自动创建一个Re ...
随机推荐
- Python实现,从txt取出号码,在数据库里查询此号码是否存在
贴代码: import osimport os.pathimport jsonimport loggerimport timegar = []file = u"E:/ybl_TestDepa ...
- 桂林电子科技大学第三届ACM程序设计竞赛 G 路径
链接:https://ac.nowcoder.com/acm/contest/558/G来源:牛客网 小猫在研究树. 小猫在研究路径. 给定一棵N个点的树,每条边有边权,请你求出最长的一条路径,满足经 ...
- Python第三章(北理国家精品课 嵩天等)
一.数字类型及其操作 整数:pow(x,y),想算多大,就算多大:以0b或0B开头表示二进制:以0o或0O开头表示八进制:以0x或0X开头表示十六进制. 浮点数:取值范围-10^308至10^308, ...
- java第七周----json
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于 ...
- iftop流量监控工具
下载iftop工具的源码包 # wget http:oss.aliyuncs.com/aliyunecs/iftop-0.17.tar.gz 安装所需的依赖包 # yum -y install gcc ...
- iOS 九宫格解锁
思路: 1.画9个按钮,通过按钮的选中状态控制按钮. 2.连线通过贝塞尔曲线绘制. 3.校验密码通过给按钮绑定tag值判断. 主要代码: OC版本: // // NineLockView.m // l ...
- 王者荣耀交流协会互评Beta版本--爱阅app
测评人:任思佳 爱阅APP软件说明书地址:http://www.cnblogs.com/szjzsd/p/7881686.html 1.根据NABCD评论作品的选题: N(Need):相比α发布来 ...
- 2019 Power BI最Top50面试题,助你面试脱颖而出系列<中>
敲黑板啦!!! 来来来 大家双眼看黑板 开始划重点啦 这篇大部分是"考试"必考题 你们一定要好好的牢记在心 一分都不要放过 刷题中... Power BI面试题目-DAX 9)什么 ...
- Facade 外观(结构型)
Facade 外观(结构型) 一:描述: Facade 外观模式是为子系统至客户端之间提供简单的一致的接口,来降低耦合度. 二:模式图 三:实现代码简单例子: 1.业务模块: 2.外观接口: 3.客户 ...
- SVG分组和引用
这是我在掘金中的文章链接地址:https://juejin.im/post/5bcfe0fa51882577e3760467