HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求分别创建一个代表请求的HttpServletResponse对象,一个代表响应的HttpServletResponse对象;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要客户端响应一些信息:找HttpServletResponse

1、简单分类

  • 负责向浏览器发送数据的方法
public ServletOutputStream getOutputStream() throws IOException;public PrintWriter getWriter() throws IOException;
  • 负责向浏览器**发送响应头(encoding…)**的方法
void setCharacterEncoding(String charset);
void setContentLength(int len);
void setContentLengthLong(long length);
void setContentType(String type);
void setDateHeader(String name, long date);
void addDateHeader(String name, long date);
void setHeader(String name, String value);
void addHeader(String name, String value);
void setIntHeader(String name, int value);
void addIntHeader(String name, int value);
  • 响应的状态码
/*** Status code (100) indicating the client can continue.*/public static final int SC_CONTINUE = 100;/*** Status code (101) indicating the server is switching protocols according* to Upgrade header.*/public static final int SC_SWITCHING_PROTOCOLS = 101;/*** Status code (200) indicating the request succeeded normally.*/public static final int SC_OK = 200;/*** Status code (201) indicating the request succeeded and created a new* resource on the server.*/public static final int SC_CREATED = 201;/*** Status code (202) indicating that a request was accepted for processing,* but was not completed.*/public static final int SC_ACCEPTED = 202;/*** Status code (203) indicating that the meta information presented by the* client did not originate from the server.*/public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;/*** Status code (204) indicating that the request succeeded but that there* was no new information to return.*/public static final int SC_NO_CONTENT = 204;/*** Status code (205) indicating that the agent <em>SHOULD</em> reset the* document view which caused the request to be sent.*/public static final int SC_RESET_CONTENT = 205;/*** Status code (206) indicating that the server has fulfilled the partial* GET request for the resource.*/public static final int SC_PARTIAL_CONTENT = 206;/*** Status code (300) indicating that the requested resource corresponds to* any one of a set of representations, each with its own specific location.*/public static final int SC_MULTIPLE_CHOICES = 300;/*** Status code (301) indicating that the resource has permanently moved to a* new location, and that future references should use a new URI with their* requests.*/public static final int SC_MOVED_PERMANENTLY = 301;/*** Status code (302) indicating that the resource has temporarily moved to* another location, but that future references should still use the* original URI to access the resource. This definition is being retained* for backwards compatibility. SC_FOUND is now the preferred definition.*/public static final int SC_MOVED_TEMPORARILY = 302;/*** Status code (302) indicating that the resource reside temporarily under a* different URI. Since the redirection might be altered on occasion, the* client should continue to use the Request-URI for future* requests.(HTTP/1.1) To represent the status code (302), it is recommended* to use this variable.*/public static final int SC_FOUND = 302;/*** Status code (303) indicating that the response to the request can be* found under a different URI.*/public static final int SC_SEE_OTHER = 303;/*** Status code (304) indicating that a conditional GET operation found that* the resource was available and not modified.*/public static final int SC_NOT_MODIFIED = 304;/*** Status code (305) indicating that the requested resource <em>MUST</em> be* accessed through the proxy given by the <code><em>Location</em></code>* field.*/public static final int SC_USE_PROXY = 305;/*** Status code (307) indicating that the requested resource resides* temporarily under a different URI. The temporary URI <em>SHOULD</em> be* given by the <code><em>Location</em></code> field in the response.*/public static final int SC_TEMPORARY_REDIRECT = 307;/*** Status code (400) indicating the request sent by the client was* syntactically incorrect.*/public static final int SC_BAD_REQUEST = 400;/*** Status code (401) indicating that the request requires HTTP* authentication.*/public static final int SC_UNAUTHORIZED = 401;/*** Status code (402) reserved for future use.*/public static final int SC_PAYMENT_REQUIRED = 402;/*** Status code (403) indicating the server understood the request but* refused to fulfill it.*/public static final int SC_FORBIDDEN = 403;/*** Status code (404) indicating that the requested resource is not* available.*/public static final int SC_NOT_FOUND = 404;/*** Status code (405) indicating that the method specified in the* <code><em>Request-Line</em></code> is not allowed for the resource* identified by the <code><em>Request-URI</em></code>.*/public static final int SC_METHOD_NOT_ALLOWED = 405;/*** Status code (406) indicating that the resource identified by the request* is only capable of generating response entities which have content* characteristics not acceptable according to the accept headers sent in* the request.*/public static final int SC_NOT_ACCEPTABLE = 406;/*** Status code (407) indicating that the client <em>MUST</em> first* authenticate itself with the proxy.*/public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;/*** Status code (408) indicating that the client did not produce a request* within the time that the server was prepared to wait.*/public static final int SC_REQUEST_TIMEOUT = 408;/*** Status code (409) indicating that the request could not be completed due* to a conflict with the current state of the resource.*/public static final int SC_CONFLICT = 409;/*** Status code (410) indicating that the resource is no longer available at* the server and no forwarding address is known. This condition* <em>SHOULD</em> be considered permanent.*/public static final int SC_GONE = 410;/*** Status code (411) indicating that the request cannot be handled without a* defined <code><em>Content-Length</em></code>.*/public static final int SC_LENGTH_REQUIRED = 411;/*** Status code (412) indicating that the precondition given in one or more* of the request-header fields evaluated to false when it was tested on the* server.*/public static final int SC_PRECONDITION_FAILED = 412;/*** Status code (413) indicating that the server is refusing to process the* request because the request entity is larger than the server is willing* or able to process.*/public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;/*** Status code (414) indicating that the server is refusing to service the* request because the <code><em>Request-URI</em></code> is longer than the* server is willing to interpret.*/public static final int SC_REQUEST_URI_TOO_LONG = 414;/*** Status code (415) indicating that the server is refusing to service the* request because the entity of the request is in a format not supported by* the requested resource for the requested method.*/public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;/*** Status code (416) indicating that the server cannot serve the requested* byte range.*/public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;/*** Status code (417) indicating that the server could not meet the* expectation given in the Expect request header.*/public static final int SC_EXPECTATION_FAILED = 417;/*** Status code (500) indicating an error inside the HTTP server which* prevented it from fulfilling the request.*/public static final int SC_INTERNAL_SERVER_ERROR = 500;/*** Status code (501) indicating the HTTP server does not support the* functionality needed to fulfill the request.*/public static final int SC_NOT_IMPLEMENTED = 501;/*** Status code (502) indicating that the HTTP server received an invalid* response from a server it consulted when acting as a proxy or gateway.*/public static final int SC_BAD_GATEWAY = 502;/*** Status code (503) indicating that the HTTP server is temporarily* overloaded, and unable to handle the request.*/public static final int SC_SERVICE_UNAVAILABLE = 503;/*** Status code (504) indicating that the server did not receive a timely* response from the upstream server while acting as a gateway or proxy.*/public static final int SC_GATEWAY_TIMEOUT = 504;/*** Status code (505) indicating that the server does not support or refuses* to support the HTTP protocol version that was used in the request* message.*/public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
200:请求响应成功
3xx:请求重定向重定向:你重新到我给你新位置去;
4xx:找不到资源   404资源不存在
5xx:服务器代码错误  500502: 网关错误

2、常见应用

1.向浏览器输出消息
2.下载文件——
(1)要获取下载文件的 路径
(2)下载的文件名是什么?
(3)设置想办法让浏览器能支持下载我们需要的东西
(4)获取下载文件的输入流
(5)创建缓冲区
(6)获取OutputStream对象
(7)将FileOutputStream流写入到buffer缓冲区
(8)将OutputStream将缓冲区中的数据输出到客户端

创建一个web项目


完善项目结构

  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="true">
</web-app>

在resources下添加一个图片1.png


在com.kuang.servlet包下创建FileServlet文件

package com.kuang.servlet;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.net.URLEncoder;public class FileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {////  (1)要获取下载文件的 路径
//        String realPath = this.getServletContext().getRealPath("/1.png");String realPath = "D:\\学习笔记\\狂神说Java\\javaweb-02-servlet\\response\\target\\classes\\1.png";System.out.println("下载文件的路径:"+realPath);//   (2)下载的文件名是什么?String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);// (3)设置想办法让浏览器能支持(Content-Disposition)下载我们需要的东西.URLEncoder.encode(fileName,"UTF-8")):用来处理中文编码,否则可能会乱码
//        resp.setHeader("Content-Disposition","attachment;filename="+ fileName);resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));// (4)获取下载文件的输入流;FileInputStream将文件变成流FileInputStream in = new FileInputStream(realPath);// (5)创建缓冲区int len = 0;byte[] buffer = new byte[1024];//   (6)获取OutputStream对象ServletOutputStream out = resp.getOutputStream();//   (7)将FileOutputStream流写入到buffer缓冲区,将OutputStream将缓冲区中的数据输出到客户端while((len=in.read(buffer))>0){out.write(buffer,0,len);}//(8)关闭流in.close();out.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

修改web.xml

 <servlet><servlet-name>fileDown</servlet-name><servlet-class>com.kuang.servlet.FileServlet</servlet-class></servlet><servlet-mapping><servlet-name>fileDown</servlet-name><url-pattern>/down</url-pattern></servlet-mapping>

HttpServletRequest

参考页面

web文件下载头信息

错误

文件下载只显示页面,不提示文件下载
错误显示

原因:

正确显示:

正确代码:

package com.kuang.servlet;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.net.URLEncoder;public class FileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {////  (1)要获取下载文件的 路径
//        String realPath = this.getServletContext().getRealPath("/1.png");String realPath = "D:\\学习笔记\\狂神说Java\\javaweb-02-servlet\\response\\target\\classes\\1.png";System.out.println("下载文件的路径:"+realPath);//   (2)下载的文件名是什么?String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);// (3)设置想办法让浏览器能支持(Content-Disposition)下载我们需要的东西.URLEncoder.encode(fileName,"UTF-8")):用来处理中文编码
//        resp.setHeader("Content-Disposition","attachment;filename="+ fileName);
//        resp.setHeader("Content-Disposition","attachment:filename="+ URLEncoder.encode(fileName,"UTF-8"));resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));//    (4)获取下载文件的输入流;FileInputStream将文件变成流FileInputStream in = new FileInputStream(realPath);// (5)创建缓冲区int len = 0;byte[] buffer = new byte[1024];//   (6)获取OutputStream对象ServletOutputStream out = resp.getOutputStream();//   (7)将FileOutputStream流写入到buffer缓冲区,将OutputStream将缓冲区中的数据输出到客户端while((len=in.read(buffer))>0){out.write(buffer,0,len);}//(8)关闭流in.close();out.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

javaweb——Response下载文件相关推荐

  1. JavaWbe\Response下载文件\Response验证码练习

    1.Response下载文件 创建一个类继承HttpServlet public class FileServlet extends HttpServlet {@Overrideprotected v ...

  2. javaWeb Response下载和上传文件

    下载文件 public class FileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest ...

  3. response下载文件

    直接上代码 //1.获取文件要下载的路径 //String realPath = req.getServletContext().getRealPath("/1.jpg"); St ...

  4. Javaweb Servlet 下载文件

    JavaWeb Servlet 实现下载文件 Servlet类 import javax.servlet.ServletException; import javax.servlet.ServletO ...

  5. 通过url地址批量打包zip下载文件

    通过url地址批量打包zip下载文件 controller @ApiOperation("通过下载url批量打包zip下载")@PostMapping("batchDow ...

  6. JavaWeb学习总结——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. JavaWeb:上传下载文件

    1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...

  8. JavaWeb -- Struts1 多文件上传与下载 DownloadAction, DispatchAction

    1. 多文件上传与下载 上传下载jsp: <%@ page language="java" import="java.util.*" pageEncodi ...

  9. response的响应头,下载文件

    response的响应头,下载文件 前端代码 <%@ page contentType="text/html;charset=UTF-8" language="ja ...

最新文章

  1. vconsole 调试 查看LOG VUE在手机上调试 手机查看h5的日志
  2. [NHibernate]代码生成器的使用
  3. python3 文件读写 r 和 rb 区别
  4. 用python画漂亮图片-Python 竟能绘制如此酷炫的三维图
  5. spring冲刺第一天
  6. wenbao与acm技巧(必备知识)
  7. python模拟键盘输入视频_python教程-模拟鼠标和键盘输入
  8. Flowable 数据库表结构 ACT_HI_COMMENT
  9. windows主机的linux虚拟机中使用neovim复制、粘贴
  10. 如何在pycharm debug类似python -m的命令
  11. 互联网+医疗考验无线部署 飞塔SAA同频部署模式巧妙化解
  12. JDK8之后,新增的时间类对象
  13. JAVA rs 是否要关闭_关闭结果集rs和statement以后,是否还要关闭数据库连接呢?...
  14. SQL语句的执行计划
  15. 麒麟官方应用商店下载地址
  16. 图神经网络 图像处理,神经网络图像修复
  17. 游戏版署过审注意事项
  18. BJ54坐标或者XA80坐标到WGS84坐标的转换(小工具附代码)
  19. 哈利波特AR游戏-巫师联盟 深度解析
  20. JAVA实现利用第三方平台发送短信验证码

热门文章

  1. Tomcat——配置详解
  2. chm 转 html 带索引,可以为CHM文件创建索引吗?
  3. Linux查看Tomcat端口
  4. 微信小程序开发(保姆式教程,点赞+收藏)
  5. 贝叶斯优化xgboost_超参数调整xgboost和神经网络的hyperopt贝叶斯优化
  6. 有关HTML与CSS的重点知识归纳(Pink)
  7. Ubuntu 20.04 安装IBUS非搜狗中文输入法
  8. 毕设之华美路由器实现无线视频监控
  9. python 多线程 setdaemon_彻底理解Python多线程中的setDaemon与join【配有GIF示意】
  10. 请问unix高级编程中的open包含哪些用法