一、Response和Request的生态环境

二、HttpServletResponse---代表响应对象

1.设置状态码

void setStatus(int sc)

状态码:

200:一切正常 正常返回数据

302:重定向

304:拿缓存

404:找不到资源

500:服务器端报错(一般情况,代码有异常)

2.设置响应头

(1)设置响应头的API

(2)案例-重定向

重定向:

实现重定向:302+Location

servlet1:

response.setStatus(302);

response.setHeader(“Location”,”url地址”);

servlet2:

response.getWriter().write(“hello”);

重定向的特点:

1)客户端访问两次

2)客户端的地址栏的地址发生了变化

response中便捷的重定向的方法:

void sendRedirect(String location)

(3)案例-定时跳转

refresh头代表定时跳转

头对应的值的写法:秒值;url=url地址

response.setHeader("refresh","5;url=/response2");

(4)304状态码的原理

3.设置响应体

(1)写给客户端字符

PrintWriter writer = response.getWriter();

writer.write(字符);

原因:write方法在写的时候 其实是将内容写到response的缓冲区,response的缓 冲区本有默认的编码格式 iso-8859-1问题:写给客户端的中文乱码

解决:手动的设置response的缓冲区编码

void setCharacterEncoding(String Charset)

问题:设置response的编码为UTF-8之后 发现页面显示


解决:通过代码去指定页面解析时的编码原因:页面默认解析的编码是GBK

通过Content-Type头去指导浏览器使用哪种编码进行页面的解析

response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);

response.setContentType("text/html;charset=UTF-8");

注意:设置Content-Type的方法内部有两个功能

1)自行设置response的缓冲区的编码是UTF-8;

2)指导浏览器的解析页面时的编码是UTF-8;

记住:解决response发中文乱码

response.setContentType("text/html;charset=UTF-8");

(2)写给客户端字节

1)获得字节流

ServletOutputStram  response.getOutputStream();

2)需求:输出验证码图片

3)需求:文件下载

两个流:

输入流:读取文件

输出流:写给客户端---写到response缓冲区

两个头:

//显示的告诉客户端文件的mime类型

response.setContentType("audio/mpeg");

//告知客户端回写的文件要以附件的形式打开(下载)

response.setHeader("Content-Disposition","attachment;filename=1.mp3");

4.Response的一些细节

1)getWriter和getOutputSteam在一个Servlet中不能同时调用

2)通过response获得的流不用手动关闭

web容器在service方法结束后会检查response获得的流是否关闭,没有关闭容器会关闭这个流。

3)response缓冲区的大小是8k  可以设置大小 只能向更大的范围设置

三、HttpServletRequest

1.获取请求行

1)获取请求方式

String method = request.getMethod(); //GET  POST

2)获得请求的资源

request.getRequestURI()

request.getRequestURL()

request.getContextPath():web应用的名称

 1         //1、请求方式
 2         String method = request.getMethod();
 3         System.out.println(method);//GET
 4         //2、获得请求资源
 5         String requestURI = request.getRequestURI();
 6         StringBuffer requestURL = request.getRequestURL();
 7         System.out.println(requestURI);
 8         System.out.println(requestURL.toString());
 9         String contextPath = request.getContextPath();
10         System.out.println(contextPath);        

3)获取get提交的数据的字符串形式

1         //3、获取get提交的字符串形式的 参数
2         String queryStr = request.getQueryString();
3         System.out.println(queryStr);

4)获取客户机的参数

1         //4、获得客户机的ip
2         String remoteAddr = request.getRemoteAddr();
3         System.out.println(remoteAddr);

2.获取请求头

 1         //1、获取一个指定的头
 2         String header = request.getHeader("User-Agent");
 3         System.out.println(header);
 4         //2、判断客户端的浏览器的类型
 5         if(header.contains("MSIE")){
 6             System.out.println("这是IE");
 7         }else if(header.contains("Firefox")){
 8             System.out.println("这是火狐");
 9         }else{
10             System.out.println("这是其他");
11         }
12         //3、获得所有的头的名称
13         System.out.println("-------------------------------------------");
14         Enumeration headerNames = request.getHeaderNames();
15         while(headerNames.hasMoreElements()){
16             String headerName = (String) headerNames.nextElement();
17             System.out.println(headerName+":"+request.getHeader(headerName));
18         }

3.获得请求体(获得post提交的参数)

请求体的格式:

username=zhangsan&password=123&hobby=zq&hobby=pq

1)String getParamter(name)

获得zhangsan:request.getParameter(“username”);

2)String[] getParameterValues(name)

获得爱好hobby:request.getParamterValues(“hobby”);

3)Map<String,String[]>  getParameterMap()

获取上述的请求体:

username:{zhangsan}

password:{12345}

hobby:{zq,pq}

4)getParameterNames():获得所有的请求参数的名称

获取上述的请求体:

[ username,password,hobby ]

 1         //1、获取username---????
 2         String username = request.getParameter("username");
 3         //get方式
 4         //编码---字节数组
 5         byte[] bytes = username.getBytes("iso8859-1");
 6         //解码---utf-8
 7         username = new String(bytes, "UTF-8");
 8
 9
10         System.out.println(username);
11         //2、password
12         String password = request.getParameter("password");
13         System.out.println(password);
14         //3、获取hobby
15         String[] hobby = request.getParameterValues("hobby");
16         System.out.println(hobby.length);
17         //4、获取所有的参数的map形式
18         Map<String,String[]> parameterMap = request.getParameterMap();
19         System.out.println(parameterMap);

问题:页面在提交中文时 到服务器端获取后乱码

原因:request对象默认的编码是iso-8859-1

解决方案:将request的编码设置成UTF-8(只适合post提交)

request.setCharacterEncoding(“UTF-8”);

注意:get怎样解决中文乱码

客户端的编码是(编码)UTF-8---->服务器端request编码是(解码)iso8859-1--->????????--->用iso8859-1编码---->UTF-8进行解码

4.Request是一个域对象和请求转发

转发的语法:

request.getRequestDispatcher(“要转发的地址”).forward(request,response);

1 request.getRequestDispatcher("/request2").forward(request, response);

request域可见范围:在一次请求链中

5.请求包含

语法:

request.getRequestDispatcher(“要包含的资源的地址”).include(request,response);

转载于:https://www.cnblogs.com/minihouseCoder/p/5624363.html

Java实战之04JavaWeb-02Request和Response相关推荐

  1. java.io.IOException: Server returned HTTP response code: 411 for URL

    今日调用一post方式提交的http接口,此接口在测试环境ip调用时无问题,但在生产环境通过域名调用时一直报如下错误: java.io.IOException: Server returned HTT ...

  2. WebService工具类调用远程接口服务时java.io.IOException: Server returned HTTP response code: 500 for URL XXX

    问题描述:在本地测试时,使用个人封装的Webservice代码工具类调用远程接口服务时,一切正常.但是一旦将该代码放到一个已有项目的中使用时,就会出现如下所示的错误提示 java.io.IOExcep ...

  3. POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL

    http发送post请求报400,405 报错如下: 发送 POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 4 ...

  4. Java实战干货分享

    Java实战项目,架构锦集,自学月薪过万的不在话下. 实战项目 Java框架

  5. Java实战项目之人力资源管理系统【源码+课后指导】_Java毕业设计/计算机毕业设计

    对就业和毕业都有帮助的Java实战项目来咯--人力资源管理系统!Java实战项目之人力资源管理系统[源码+课后指导]_Java毕业设计/计算机毕业设计https://www.bilibili.com/ ...

  6. Java实战项目之个人日记本系统【源码+课后指导】_Java毕业设计/计算机毕业设计

    供大家练习学习用的Java实战项目来咯--[个人日记本系统]!Java实战项目之个人日记本系统[源码+课后指导]_Java毕业设计/计算机毕业设计https://www.bilibili.com/vi ...

  7. java报错--java.io.IOException: Server returned HTTP response code: 502

    java.io.IOException: Server returned HTTP response code: 502 for URL: http://ip.taobao.com/service/g ...

  8. 尚学堂java实战第四章课后习题

    尚学堂java实战第四章课后习题 文章中的题目答案仅供参考 选择题答案: 1.B 解析:一个java类必然存在构造器,即使没有定义构造器,也会存在一个默认的无参构造器. 2.D 3.AC 解析: A( ...

  9. 【源码及课件分享】Java实战项目之酒店客房管理系统_Java项目开发_Java项目实战

    Java实战项目又双叒叕来咯~小伙伴们请查收~酒店客房管理系统![源码及课件分享]Java实战项目之酒店客房管理系统_Java项目开发_Java项目实战_Java毕业设计https://www.bil ...

  10. 酒店管理系统 Java实战 毕业设计

    Java实战项目    来咯~小伙伴们请查收~酒店客房管理系统!毕业设计的小伙伴不用慌张了哦! 07:23 [Java毕业设计]27分钟帮你搞定酒店管理系统(附项目运行) 00 敲码敲坏仨键盘 Jav ...

最新文章

  1. 对比四种爬虫定位元素方法,你更爱哪个?
  2. 使用wireshark分析TLSv2(详细)
  3. 黄聪:主目录安装Wordpress,根目录安装Discus,httpd.ini如何写?
  4. python中语法错误-python中的语法错误是指什么
  5. insert式注射攻击解析
  6. RabbitMQ三种订阅模式
  7. 火焰效果材质实现_利用噪音图制作一个纸张燃烧的效果
  8. shell 进入hadoop_Hadoop关于HDFS的基本操作(Shell命令)
  9. opensource项目_最佳Opensource.com:编程
  10. 79 ----二次曲面的分类、二次项系数矩阵的特征多项式、二次项系数矩阵的特征值与特征向量、消去二次交叉项、二次曲面方程中的一次项和常数项的变化
  11. 数组累加兼eval性能测试
  12. dnf修改服务器时间限制,DNF历史性革新,团本刷新时间改为周六,为黑鸦让路
  13. 人工智能改变我们生活的7种方式
  14. 禁止横竖屏切换、强制横竖屏
  15. [嵌入式学习]arm开发板通过NFS(网络文件系统)快捷访问和操作Ubuntu文件系统
  16. 计算机的无线安全类型在哪里设置,在电脑上设置无线热点的方法
  17. C语言实现双人五子棋
  18. 数码管显示倒计时c语言程序,第32节:数码管中的倒计时程序
  19. vue幸运大转盘实现
  20. LeedCode 24:两两交换链表中的节点

热门文章

  1. Changes in Android 7 Nougat
  2. Android SQLite Database的使用模板
  3. Linux kernel 3.10内核源码分析--slab原理及相关代码
  4. IBM HyperLedger fabric 详解
  5. JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑
  6. mysql handlers,2 Handlers
  7. java常见业务对象_Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分...
  8. Qt 运用鼠标绘制多边形
  9. 2021.11.18
  10. 网易游戏2019暑期实习开发岗笔试题