response的基本使用

HttpServletResponse

HTTP响应报文

  • response由响应行,响应头,响应体组成
    1. response响应行:格式:协议/版本 状态码
状态码状态描述说明
200OK
302Move temporarily重定向,请求的资源临时从不同的 URI响应请求。
304Not Modified从缓存中读取数据,不从服务器重新获取数据
403Forbidden
404Not Found
500Internal Server Error服务器内部错误。通常程序抛异常

2. response响应头:通常也是key=value形式

响应头key响应头value
location指定响应的路径,需要与状态码302配合使用,完成跳转,实现重定向。
content-Type响应正文的类型(MIME类型)例如:text/html;charset=UTF-8
content-disposition通过浏览器以附件形式解析正文,例如:attachment;filename=xx.zip
refresh页面刷新,例如:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn

3. response响应体:也就是服务器发给浏览器的资源

HttpServletResponse对象作用

HttpServletResponse对象常用API
  1. 响应行
方法说明
setStatus(int code)向浏览器发送状态码

2. 响应头

方法说明
setHeader(String name,String value)设置响应头信息

3. 响应体

方法说明
ServletOutputStream getOutputStream()用于向浏览器输出二进制数据。【字节流–文件下载】
java.io.PrintWriter getWriter()用于向浏览器输出字符数据。【字符流–给浏览器响应数据】

代码示例

//1.响应头---定时刷新  RefreshServlet.java
response.setHeader("refresh","3;htt://www.baidu.com");

//2.设置输出语句以文本形式解析
//可以简化下面写法
response.setHeader("content-type","text/plain");
//简化如下
response.setContentType("text/plain");

response.getWriter().println("<html>");
response.getWriter().println("<body>");
response.getWriter().println("<h1>);
response.getWriter().println("hello content");
response.getWriter().println(</h1>");
response.getWriter().println("</body>");
response.getWriter().println("</html>");


//3解决中文乱码问题
response.setHeader("content-type","text/html;charset=utf-8");
//简化书写如下
response.setContentType("text/html;charSet=utf-8");

//4解决重定向
response.setStatus(302);
response.setHeader("location",url);
//简化书写如下
response.sendRedirect(url)
重定向和重转发的区别
区别点转发重定向
实现原理服务器内部浏览器执行
请求次数一次两次
浏览器地址栏不发生变化变为第二次请求地址
能否共享request域能共享不能共享
作用共享request域对象完成跳转
写法request.getRequestDispatcher(url).forward(request,response)response.sendRedirect(url)

文件下载
  1. 创建一个页面,展示所有要被下载的文件的链接;
  2. 链接要下载的文件名称,发送给服务器的servlet,让servlet进行处理;
  3. 服务器加载文件资源;
  4. 提示浏览器,以下载的方式,获取服务器资源;
  5. 使用IO的方式,将文件数据输出到浏览器(response.getOutputStream());
//网页文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
    <a href="/download?filename=1.jpg">1.jpg</a><br>
    <a href="/download?filename=2.txt">2.txt</a><br>
    <a href="/download?filename=3.zip">3.zip</a><br>
    <a href="/download?filename=Sublime.exe">Sublime.exe</a><br>
</body>
</html>
//servlet文档
@webServlet(name="DownloadServlet",urlPatterns="download")

public class DownloadServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request,HttpServletRespnse response){
            //获取要下载的文件名
            String filename = request.getParameters("filename");
            //获取Context域下的文件路径
            String path = request.getServletContext().getRealPath("/WEB-INF/"+filename);
            //获取文件扩展名
            String mimeType = request.getServletContext().getmimeType(filename);

            //告诉浏览器以附件的形式来展示文件
            //response.setHeader("content-type",mimeType);
            //简化形式
            response.setHeader(mimeType);

            //告诉浏览器以附件的形式来展示文件
        response.setHeader("Content-Disposition","attachment;filename="+filename);

            //开启IO流下载
            File file = new File(path);
            if(file.exist())
            {
                //输入
                FileInputStream in = new FileInputStream(file);
                //输出
                ServletOutputStream out = response.getOutputStream();

                int len= -1;
                byte[] buf = new byte[1024];
                while((len = in.read(buf))!=-1){
                    out.write(buf,0,len);
                }
                //input是服务器资源必选关闭
                in.close();
                //output是浏览器资源,并且是响应对象的方法 响应一次就自动结束,所以不用关。
            }


    }

    protected void doPost(HttpServletRequest request,HttpServletRespnse response){
        doGet(request,response);
    }
}
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值