一、Response响应字符数据
使用:
1、通过Response对象获取字符输出流
PrintWriter writer = resp.getWriter();
2、写数据
writer.write("aaa");
代码示例:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * 响应字符数据:设置字符数据的响应行 */ @WebServlet("/resp3") public class ResponseDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //1、获取字符输出流 PrintWriter writer = response.getWriter(); writer.write("你好"); writer.write("<h1>aaa</h1>"); //细节:流不需要关闭 } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
执行结果:
注意:
1、该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭
2、中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1
resp.setContentType("text/html;charset=utf-8");
二、Response响应字节数据
使用:
1、通过Response对象获取字符输出流
ServletOutputStream outputStream = resp.getOutputStream();
2、写数据
outputStream.write(字节数据);
代码示例:
import jdk.swing.interop.SwingInterOpUtils; import org.apache.commons.io.IOUtils; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; /** * 响应字符数据:设置字节数据的响应行 */ @WebServlet("/resp4") public class ResponseDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、读取文件 FileInputStream fis = new FileInputStream("d://a.png"); //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); // } //3、利用工具类进行copy IOUtils.copy(fis,os); fis.close(); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
执行结果:
以上是利用IOUtils工具类copy数据使用示例,使用方法如下:
1、导入坐标
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
2、使用
IOUtils.copy(输入流,输出流);