multipart request_Request和Response

multipart request_Request和Response_第1张图片

Response讲解

7.1 Response简介

定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法。 要发送 MIME 正文响应中的二进制数据,请使用 #getOutputStream 返回的 ServletOutputStream。要发送字符数据,请使用 #getWriter 返回的 PrintWriter 对象。要混合二进制数据和文本数据,例如要创建 multipart 响应,请使用 ServletOutputStream 并手动管理字符部分。 可使用 #setCharacterEncoding 和 #setContentType 显式指定 MIME 正文响应的 charset,或使用 #setLocale 方法隐式指定它。显式指定优先于隐式指定。如果未指定 charset,则将使用 ISO-8859-1。setCharacterEncoding、setContentType 或 setLocale 方法必须在调用 getWriter 之前,并且必须在提交采用要使用的字符编码的响应之前调用。

7.2 HttpServletResponse介绍

扩展 ServletResponse 接口以提供特定于 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。 客户端向服务器发起的都是HTTP协议操作,所以我们大部分使用HttpServletResponse对象作为直接操作对象!

7.3 HttpServletResponse 常用API介绍

方法名称作用setStatus(int code)设置响应状态码setHeader(name,value)设置响应信息头setCharacterEncoding(String);设置编码格式setContentType(String)设置返回数据mimetypegetWriter()获取字符输出流getOutputStream()获取字节输出流

7.4 设置返回字符编码格式

  • 方案1
    response.setCharacterEncoding()
    设置tomcat编码格式
    编写返回的文本内容
    设置浏览器解析文本内容格式
    可以解决返回字符串乱码问题,但是需要将返回的字符串封装到html代码中.操作繁琐!
  • 方案2
    response.setCharacterEncoding()
    response.setHeader("Content-type","text/html;charset=UTF-8")
    方案按相对简单,通过设置响应头告知浏览器解析字符串的编码格式!
  • 方案3
    response.setContentType("text/html;charset=UTF-8")
    利用setContentTyoe这种综合性的写法解决问题!此方法也是开发中常用的方法!方便!

7.5 Response练习

  1. 用户下载服务器图片
    public class DownLoadServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /**
    * 别人访问我 我给你一张图片
    *
    * 1.获取图片的输入流
    * 2.response的字节输出流
    */
    //1.获取图片或者文件的输入流
    //想要或某个文件 你必须知道绝对路径
    //手段: 项目中的相对路径 去获取绝对路径
    // /吃鸡.jpg
    // /WEB-INF/classes/吃鸡.jpg
    // /WEB-INF/classes/com/itqf/servlet/吃鸡.jpg
    //ServletContext getRealPath 相对路径转成绝对路径
    String path = getServletContext().getRealPath("/吃鸡.jpg");
    System.out.println(path);
    //文件输入流
    FileInputStream stream = new FileInputStream(path);
    //xx/xx/x/x/x/x/x/x/吃鸡.jpg
    //获取文件的名字 /
    //File.separator == /
    String filename = path.substring(path.lastIndexOf(File.separator)+1);
    //IE
    // filename = URLEncoder.encode(filename,"UTF-8");
    //其他
    filename = new String(filename.getBytes("UTF-8"),"ISO-8859-1");
    //设置响应头
    //content-disposition", "attachment;filename="+filename
    //下载用的 attachment下载: filename下载文件的名字
    response.setHeader("content-disposition", "attachment;filename="+filename);
    //根据文件名字的后缀名获取类型
    String mimetype = getServletContext().getMimeType(filename);
    response.setContentType(mimetype); //下载文件的类型
    ServletOutputStream outputStream = response.getOutputStream();
    byte [] buffer = new byte [8*1024];
    int len = 0;
    wh

你可能感兴趣的:(multipart,request,response,返回图片,response获取响应内容)