ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

servlet中的HttpServletResponse对象

2022-03-28 20:00:08  阅读:185  来源: 互联网

标签:浏览器 pw 对象 resp HttpServletResponse 响应 println servlet


当有多个客户端浏览器去请求Tomcat时,Tomcat会为每一个客户端浏览器创建一对独立的HttpServletRequest与HttpServletResponse对象

HttpServletResponse对象代表服务器的响应,在该对象中封装了响应客户端浏览器的流对象,以及向客户端浏览器响应的响应头,响应数据,响应状态码等信息

设置响应类型

客户端浏览器根据给定的响应类型决定如何处理响应

setContentType("MIME"):通过MIME-Type设置响应类型。

 

设置字符型响应

  • resp.setContentType("text/html")

    响应类型为文本型,内容含有html字符串,是默认响应类型

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应类型为html型
        resp.setContentType("text/html;utf-8");

        //获取响应字符流
        PrintWriter pw=resp.getWriter();

        //向客户端响应数据
        pw.println("<!DOCTYPE html>");
        pw.println("<html lang=\"en\">");
        pw.println("<head>");
        pw.println("<meta charset=\"UTF-8\">");
        pw.println("<title>Title</title>");
        pw.println("</head>");
        pw.println("<body>");
        pw.println("<font color='#663399'>HelloWord</font>");
        pw.println("</body>");
        pw.println("</html>");

        //刷新流
        pw.flush();
        //关闭流
        pw.close();
    }

 

 

 

  • resp.setContentType("text/plain")

    响应类型为文本型,内容是普通文本,不会解析html标签。

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应类型为普通文本型
        resp.setContentType("text/plain;utf-8");

        //获取响应字符流
        PrintWriter pw=resp.getWriter();

        //向客户端响应数据
        pw.println("<!DOCTYPE html>");
        pw.println("<html lang=\"en\">");
        pw.println("<head>");
        pw.println("<meta charset=\"UTF-8\">");
        pw.println("<title>Title</title>");
        pw.println("</head>");
        pw.println("<body>");
        pw.println("<font color='#663399'>HelloWord</font>");
        pw.println("</body>");
        pw.println("</html>");

        //刷新流
        pw.flush();
        //关闭流
        pw.close();
    }

 

 

 

  • resp.setContentType("application/json")

    响应类型为JSON格式的字符串。

 

 

 

 设置字节型响应

  • resp.setContentType("image/jpeg")

    响应类型为图片类型,图片类型为jpeg或jpg格式。

  • resp.setContentType("image/gif")

    响应类型为图片类型,图片类型为gif格式。

设置响应编码

 

 

  •  response.setContentType("text/html;charset=utf-8");

    不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文

  • response.setCharacterEncoding("utf-8");

    仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是              UTF-8的时候,就会看到乱码,需要手动指定浏览器编码。

重定向响应

 

 

 

 

 

 

 

  • response.sendRedirect(URL地址)

    重定向响应会在响应头中添加一个Location的key,对应的value是给定的URL。客户端浏览器在解析响应头后自动向Location中的URL 发送请求。

 

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //产生重定向响应
        resp.sendRedirect("http://www.baidu.com");
    }

 

重定向响应的特点:

 

1)产生两次请求和两次响应

2)重定向的URL由客户端浏览器发送

3)浏览器地址栏发生改变

案例:

创建一个搜索页面,通过百度搜索引擎完成内容搜索

1)完成搜索页面search.html的编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>search</title>
</head>
<body>
<form action="redirect">
<!--    搜索框-->
    <input type="text" name="text">
<!--    搜索按钮-->
    <input type="submit" value="search" name="search">
</form>
</body>
</html>

2)完成servlet的编写

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.net.URLEncoder;

@WebServlet("/redirect")
public class redirect extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取搜索框的值
        String value=req.getParameter("text");
        //产生重定向响应
        resp.sendRedirect("https://www.baidu.com/s?wd="+ URLEncoder.encode(value,"utf-8"));//对浏览器进行URL编码
    }
}

 

 HttpServletResponse对象实现文件下载

在实现文件下载时,需要在响应头中添加附加信息。

 //Content-Disposition-----文件配置,attachment-----附件
 response.addHeader("Content-Disposition","attachment; filename="+文件名);
  • Content-Disposition:attachment

    该附加信息表示作为对下载文件的一个标识字段,直接启动下载功能下载文件。不会在浏览器中 显示而是直接做下载处理。

  • filename=文件名

    浏览器使用该文件名作为下载文件的文件名。

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //读取要下载的文件
        File file=new File("D:\\flower.jpg");
        //用字节输入存储文件
        InputStream is= new FileInputStream(file);
        //创建字节数组
        byte[] buff=new byte[is.available()];
        is.read(buff);

        //在响应添加附加信息
        resp.addHeader("Content-Disposition", "attachment; filename="+file.getName());
        //产生响应
        //创建字节输出流
        OutputStream os=resp.getOutputStream();
        //响应到客户端
        os.write(buff);
        //刷新流
        os.flush();
        //关闭流
        os.close();
    }

 

解决文件名是中文名所出现的乱码问题

//将原来的文件名按照gbk的方式变成字节,再按iso-8859-1编码方式变成新的字符串
resp.addHeader("Content-Disposition","attachment;filename="+
                new String(file.getName().getBytes("gbk"),"iso-8859-1"));

 

标签:浏览器,pw,对象,resp,HttpServletResponse,响应,println,servlet
来源: https://www.cnblogs.com/chaplu/p/16068668.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有