做gif网站,营销型网站建设便宜,网站设计 网站建设,潍坊网络营销#x1f34e;道阻且长#xff0c;行则将至。#x1f353; 本文是javaweb的第三篇#xff0c;介绍了Request请求转发与Response响应。 上一篇#xff1a;JavaWeb《二》Servlet、Request请求 下一篇#xff1a;敬请期待 目录一、Request请求转发#x1f34f;二、Response对… 道阻且长行则将至。 本文是javaweb的第三篇介绍了Request请求转发与Response响应。 上一篇JavaWeb《二》Servlet、Request请求 下一篇敬请期待 目录一、Request请求转发二、Response对象1.响应数据2.Respones请求重定向3.响应字符数据4.响应字节数据一、Request请求转发 请求转发(forward)是一种在服务器内部的资源跳转方式。例如浏览器发送请求给服务器服务器中对应的资源A接收到请求A处理完请求后将请求发给资源BB处理完后将结果响应给浏览器这个过程就是请求转发。 实现方式: req.getRequestDispatcher(“资源B路径”).forward(req,resp); 继续上一篇的我们创建两个servletreq1和req2在第一个里面请求转发到第二个只需要在doGet里面添加request.getRequestDispatcher(/req2).forward(request,response); 转发数据 请求转发资源间共享数据:使用Request对象。 request对象提供的三个方法: 1.存储数据到request域[范围,数据是存储在request对象]中 void setAttribute(String name,Object o); 2.根据key获取值 Object getAttribute(String name); 3.根据key删除该键值对 void removeAttribute(String name);
继续上面代码添加:
//req1
request.setAttribute(msg,hello);
//请求转发
request.getRequestDispatcher(/req2).forward(request,response);
//req2
//获取数据
Object msg request.getAttribute(msg);
System.out.println(msg);二、Response对象 Request:使用request对象来获取请求数据 Response:使用response对象来设置响应数据 在上一篇中把内容返回到网页上就是一个响应。 1.响应数据
HTTP响应数据总共分为三部分内容分别是响应行、响应头、响应体对于这三部分内容的数据respone对象都提供了一些方法来进行设置
响应行 例如一个响应行HTTP/1.1 200 OK第一个是协议和版本第二个是状态响应码第三是状态码描述。通常是要设置状态响应码void setStatus(int sc);响应头 Content-Type: text/html响应头是一个键值对设置void setHeader(String name,String value);响应体 响应体是通过字符、字节输出流的方式往浏览器写 获取字符输出流PrintWriter getWriter(); 获取字节输出流ServletOutputStream getOutputStream();
2.Respones请求重定向
Response重定向(redirect):一种资源跳转方式。 浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B
重定向的实现方式: 给浏览器响应一个302的状态码location的一个访问资源B的路径
resp.setStatus(302);
resp.setHeader(location,资源B的访问路径);重定向浏览器地址栏路径会变化因为进行重定向访问的时候是浏览器发送两次请求。因此可以使用服务器外部资源。 而上一节的请求转发不会发生地址栏路径变化其是服务内部操作。
3.响应字符数据
我们可以在浏览器上显示一些字符也可以显示带html标签的类型。
返回一个简单的字符串aaa
response.setContentType(text/html;charsetutf-8);
//1. 获取字符输出流
PrintWriter writer response.getWriter();
writer.write(aaa);返回一串html字符串并且能被浏览器解析
PrintWriter writer response.getWriter();
//content-type告诉浏览器返回的数据类型是HTML类型数据这样浏览器才会解析HTML标签
response.setHeader(content-type,text/html);
writer.write(h1aaa/h1);4.响应字节数据
将字节数据图片等写到浏览器需要两个步骤
通过Response对象获取字节输出流ServletOutputStream outputStream resp.getOutputStream();通过字节输出流写数据: outputStream.write(字节数据);
实现
//1. 读取文件
FileInputStream fis new FileInputStream(d://a.jpg);
//2. 获取response字节输出流
ServletOutputStream os response.getOutputStream();
//3. 完成流的copy
byte[] buff new byte[1024];
int len 0;
while ((len fis.read(buff))! -1){os.write(buff,0,len);
}
fis.close();也可以使用别人提供好的方法来简化代码
pom.xml添加依赖
dependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.6/version
/dependency调用工具类方法
//fis:输入流 os:输出流
IOUtils.copy(fis,os);实现
//1. 读取文件
FileInputStream fis new FileInputStream(d://a.jpg);
//2. 获取response字节输出流
ServletOutputStream os response.getOutputStream();
//3. 完成流的copy
IOUtils.copy(fis,os);
fis.close();快来试一试吧 ☕物有本末事有终始知所先后。 ☝☝☝☝☝我的CSDN☝☝☝☝☝☝