response.setContentType()类型及解释

本文详细解释了如何通过response.setContentType方法设置MIME类型,以便浏览器能够正确解析和展示不同类型的数据内容。文中列举了一些常见的MIME类型及其对应的数据格式。
    response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。

MIME类型:
    tomcat的安装目录\conf\web.xml定义了大量的类型,例如:
    <mime-mapping>
        <extension>html</extension>
        <mime-type>text/html</mime-type>html类型数据
    </mime-mapping>
    <mime-mapping>
        <extension>json</extension>
        <mime-type>application/json</mime-type>json格式数据
    </mime-mapping>
    <mime-mapping>
        <extension>text</extension>
        <mime-type>text/plain</mime-type>文本数据
    </mime-mapping>
    等等。。。。。

    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    java.io.PrintWriter pw = null;  
    try{  
        pw = response.getWriter();  
        pw.write(print.get("result")); //将需要返回的数据 
    }catch (Exception e){  
        //   
    }finally{  
        pw.close();  
    }

常见ContentType类型:
<option   value="image/bmp">BMP</option>   
<option   value="image/gif">GIF</option>   
<option   value="image/jpeg">JPEG</option>   
<option   value="image/tiff">TIFF</option>   
<option   value="image/x-dcx">DCX</option>   
<option   value="image/x-pcx">PCX</option>   
<option   value="text/html">HTML</option>   
<option   value="text/plain">TXT</option>   
<option   value="text/xml">XML</option>   
<option   value="application/afp">AFP</option>   
<option   value="application/pdf">PDF</option>   
<option   value="application/rtf">RTF</option>   
<option   value="application/msword">MSWORD</option>   
<option   value="application/vnd.ms-excel">MSEXCEL</option>   
<option   value="application/vnd.ms-powerpoint">MSPOWERPOINT</option>   
<option   value="application/wordperfect5.1">WORDPERFECT</option>   
<option   value="application/vnd.lotus-wordpro">WORDPRO</option>   
<option   value="application/vnd.visio">VISIO</option>   
<option   value="application/vnd.framemaker">FRAMEMAKER</option>   
<option   value="application/vnd.lotus-1-2-3">LOTUS123</option>

引用于:http://blog.sina.com.cn/s/blog_a03d702f010143tw.html
在 Java Web 开发中,`response.setContentType()` 用于设置 HTTP 响应的内容类型(MIME 类型)和字符编码,确保浏览器或客户端能正确解析返回的数据。以下是详细说明和常见用法: --- ## **1. 基本语法** ```java response.setContentType("MIME类型;charset=字符编码"); ``` - **MIME 类型**:指定返回数据的格式(如 `text/html`、`application/json`)。 - **字符编码**(可选):推荐显式设置(如 `UTF-8`),避免中文乱码。 --- ## **2. 常见 MIME 类型示例** ### **文本类** ```java response.setContentType("text/html;charset=UTF-8"); // HTML 页面 response.setContentType("text/plain;charset=UTF-8"); // 纯文本 response.setContentType("text/xml;charset=UTF-8"); // XML 数据 ``` ### **文件下载** ```java response.setContentType("application/octet-stream"); // 通用二进制流(如未知文件类型response.setContentType("application/pdf"); // PDF 文件 response.setContentType("application/msword"); // .doc 文件 response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // .docx ``` ### **JSON/JavaScript** ```java response.setContentType("application/json;charset=UTF-8"); // JSON 数据 response.setContentType("application/javascript"); // JS 文件 ``` ### **图片/多媒体** ```java response.setContentType("image/jpeg"); // JPG 图片 response.setContentType("image/png"); // PNG 图片 response.setContentType("video/mp4"); // MP4 视频 ``` --- ## **3. 关键场景示例** ### **场景1:返回 JSON 数据(API 接口)** ```java @GetMapping("/api/data") public void getData(HttpServletResponse response) throws IOException { response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); out.write("{\"name\":\"张三\", \"age\":25}"); } ``` ### **场景2:文件下载(避免浏览器直接打开)** ```java @GetMapping("/download") public void downloadFile(HttpServletResponse response) throws IOException { File file = new File("example.pdf"); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=example.pdf"); Files.copy(file.toPath(), response.getOutputStream()); } ``` ### **场景3:防止中文乱码(HTML 页面)** ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.write("<html><body>中文内容</body></html>"); } ``` --- ## **4. 注意事项** 1. **字符编码顺序**: - 必须在 `getWriter()` **之前**设置,否则可能不生效。 - 错误示例: ```java PrintWriter out = response.getWriter(); // 先获取 Writer response.setContentType("text/html;charset=UTF-8"); // 再设置编码(无效!) ``` 2. **与 `request.setCharacterEncoding()` 的区别**: - `request.setCharacterEncoding("UTF-8")` 用于解析**请求参数**(如 POST 表单数据)。 - `response.setContentType()` 用于控制**响应内容**的编码。 3. **浏览器兼容性**: - 某些旧浏览器可能忽略 `charset`,建议通过 HTML meta 标签双重保障: ```html <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> ``` --- ## **5. 完整 Servlet 示例** ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ContentTypeServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 设置响应类型和编码 response.setContentType("text/html;charset=UTF-8"); // 2. 获取输出流 PrintWriter out = response.getWriter(); // 3. 输出内容 out.println("<!DOCTYPE html>"); out.println("<html><head><title>ContentType示例</title></head>"); out.println("<body><h1>你好,世界!</h1></body></html>"); } } ``` --- ## **6. 常见问题** | **问题** | **解决方案** | |------------------------------|------------------------------------------------------------------------------| | 中文在浏览器中显示乱码 | 确保 `setContentType` 包含 `charset=UTF-8`,且文件本身保存为 UTF-8 编码。 | | 下载文件文件名乱码 | 使用 `URLEncoder.encode(filename, "UTF-8")` 处理文件名(参考下方代码)。 | | JSON 数据被浏览器下载而非解析 | 检查 `Content-Type` 是否为 `application/json`,而非 `text/plain`。 | ### **文件名编码示例(下载时)** ```java String fileName = "中文文件.pdf"; fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName); ``` --- ## **总结** - **核心作用**:明确数据格式和编码,避免乱码或解析错误。 - **关键点**: - 在获取 `Writer` 或 `OutputStream` **之前**设置。 - 文件下载需结合 `Content-Disposition` 头。 - **推荐默认设置**: ```java response.setContentType("text/html;charset=UTF-8"); // 通用网页 response.setContentType("application/json;charset=UTF-8"); // API 接口 ``` --- ### **
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半山猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值