HttpServletResponse对象
向客户端发送数据的方法:
发送响应头的方法:
使用OutputStream流
String data = "lzj"; OutputStream outputStream = response.getOutputStream(); response.setHeader("content-type","texy/html;charset = UTF-8"); byte[] dataByteArr = data.getBytes("UTF-8");//将字符转换成字节数组,指定以UTF-8编码进行转换; outputStream.write(dataByteArr);
使用PrintWriter流
String data = "lzj"; response.setHeaderEncoding("content-type","hext/html;charset = UTF-8");//控制响应头以UTF-8的编码显示数据。 PrintWriter out = response.getWriter(); out.write(data);
比较这两种像客户端输出的方式不难发现平时使用PrintWriter向浏览器输出字符数据会比较方便,省去了转换字节的步骤;
且需要注意的是这两种方法是相互排斥的,即调用其中一个后,就不能调用另一个了;
在输出数据是数字时也要以字符串的方式输出:
OutputStream.write(1); PrintWriter.write(1);//这两种方式都不会输出数字1到浏览器 OutputStream.write(1+""); PrintWriter.write(1+"");//其中1加上一个空字符串后,数字 1就变成字符串1,可以成功输出到浏览器中;
使用Response实现文件下载
在编写文件下载功能时,最好使用OutputStream流,因为OutputStream流是转化为字节流,可以处理任何类型的数据,而PrintWriter流是字符流,只能处理字符类型数据,如处理字节类型数据容易导致数据丢失;
实现文件下载的步骤:
String realPath = this.getServletContext.getRealPath("/xxxx/1.jsp");//获取下载文件的绝对路径 String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取下载文件名 response.setHeader("content-disposition","attachment;filename =" +URLEncoder.encode(fileName,"UTF-8") );//设置content-disposition响应头控制浏览器以下载形式打开文件,并且让文件名以UTF-8形式显示 InputStream in = new FileInputStream(realPath);//获取文件的输入流 byte[] buffer = new byte[1024];//创建缓冲区 OutputStream out = response.getOutputStream();//创建OutputStream流 //将输入流写入缓冲区 int len = 0; while ((len = in.read(buffer))>0){ out.write(buffer,0,len); }//使用缓冲区的数据通过OutputStream输出到浏览器中 in.close();
response常用的响应头设置
response.setDateHeader("expries",-1);//禁止浏览器缓存当前的文档内容 response.setHeader("refresh","x");//设置refresh控制浏览器每隔x秒刷新一次 response.setStatus("xxx");//设置状态码 response.sendRedirect(String location);//调用response对象中的sendRedirect()方法实现重定向;
web工程“/”代表的位置
若是给服务器使用,代表当前的web工程;如:
<%@include file = "/xxx/xxx/xxx.jsp" %> <jsp:include page = "xxx/xxx/xxx.jsp" />
若是给浏览器使用,则代表webapps目录;如:
<a href = "/xxx/xxx/xxx.jsp">xxx<a>
<form action = "/xxx/xxx/xxx" method = "post">
通常我们使用request.getContextPath()来替代web项目名,即request.getContextPath()等价于“/项目名”,这样即使我们修改项目名,开发的代码也不需要改动,比较灵活;
原文:https://www.cnblogs.com/lzj-learn/p/11608994.html