JavaWeb 核心之 Response

简述:

 HttpServletResponse是用于将Servlet处理好的内容发送给浏览器的类,服务器通过对HttpServletResponse对象中的内容进行截取、拼接就能获得一个完整的HTTP响应信息。

一、完成文件下载(文件拷贝)

二、生成验证码(了解其中原理,验证码图片生成的代码不用写 )

1、设置 http 响应行的状态码

    

setStatus(int sc);

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            //1、手动设置 http 响应行的状态码

            response.setStatus(404);

            

      }

效果:

2、设置 http 响应头

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            Date date = new Date();

            // 设置响应头

            response.addHeader("name", "zhangsan");

            response.addIntHeader("age", 20);

            response.addDateHeader("birthday", date.getTime());

      }

效果:

重定向:(状态码 302)

代码实现

Servlet1:

package com.ma.header;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

 * Servlet implementation class Servlet1

 */

public class Servlet1 extends HttpServlet {

      

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // 没有响应 告知客户端去重定向 Servlet2

            // 1、设置状态码

            response.setStatus(302);

            // 2、设置响应头 Location

            response.setHeader("Location", "/WEB14/servlet2");

      }

      /**

       * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

       */

      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // TODO Auto-generated method stub

      }

}

Servlet2:

package com.ma.header;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

 * Servlet implementation class Servlet2

 */

public class Servlet2 extends HttpServlet {

      private static final long serialVersionUID = 1L;

  

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // 重定向的页面

            response.getWriter().write("Servlet2 ! ! !");

      }

      /**

       * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

       */

      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // TODO Auto-generated method stub

      }

}

重定向到 Servlet2:

封装的方法:

//封装成重定向方法

            response.sendRedirect("/WEB14/servlet2");

 页面跳转的方法:

// 设置定时刷新的头

            response.setHeader("refresh", "5;url=http://baidu.com");

向客户端写内容:

package com.ma.header;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

 * Servlet implementation class ByteServlet

 */

public class ByteServlet extends HttpServlet {

      

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            //使用 response 获得字节输出流

            ServletOutputStream out = response.getOutputStream();

            

            //获得服务器上的图片

            String realpath = this.getServletContext().getRealPath("a.jpg");

            InputStream in = new FileInputStream(realpath);

            

            int len = 0;

            byte[] buffer = new byte[1024];

            while((len = in.read(buffer)) > 0){

                  out.write(buffer, 0, len);

            }

            in.close();

            out.close();

            

      }

      /**

       * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

       */

      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // TODO Auto-generated method stub

      }

}

案例一:完成文件下载

    问题:1)什么时候会文件下载?

浏览器不能解析的文件就会下载

              2)什么情况下需要在服务器端编写文件下载的代码?

1、使用 a 标签直接直接指向文件

代码一:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

      <h1>使用 a 标签直接服务器的资源</h1>

      <a href="/WEB14/download/a.flv">a.flv</a><br/>

      <a href="/WEB14/download/a.jpg">a.jpg</a><br/>

      <a href="/WEB14/download/a.mp3">a.mp3</a><br/>

      <a href="/WEB14/download/a.mp4">a.mp4</a><br/>

      <a href="/WEB14/download/a.txt">a.txt</a><br/>

      <a href="/WEB14/download/a.zip">a.zip</a><br/>

</body>

</html>

2、使用服务端编写代码

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

      <h1>使用 a 标签直接服务器的资源</h1>

      <a href="/WEB14/download/a.flv">a.flv</a><br/>

      <a href="/WEB14/download/a.jpg">a.jpg</a><br/>

      <a href="/WEB14/download/a.mp3">a.mp3</a><br/>

      <a href="/WEB14/download/a.mp4">a.mp4</a><br/>

      <a href="/WEB14/download/a.txt">a.txt</a><br/>

      <a href="/WEB14/download/a.zip">a.zip</a><br/>

      <h1>使用 服务器端编码的方式实现文件的下载</h1>

      <a href="/WEB14/downloadServlet?filename=a.flv">a.flv</a><br/>

      <a href="/WEB14/downloadServlet?filename=a.jpg">a.jpg</a><br/>

      <a href="/WEB14/downloadServlet?filename=a.mp3">a.mp3</a><br/>

      <a href="/WEB14/downloadServlet?filename=a.mp4">a.mp4</a><br/>

      <a href="/WEB14/downloadServlet?filename=a.txt">a.txt</a><br/>

      <a href="/WEB14/downloadServlet?filename=a.zip">a.zip</a><br/>

      

</body>

</html>

代码二:

package com.ma.header;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class DownloadServlet

*/

public class DownloadServlet extends HttpServlet {

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获得要下载的文件的名称

        String filename = request.getParameter("filename");//a.flv

        //获取文件的绝对路径

        String path = this.getServletContext().getRealPath("download/"+filename);

        //获得文件的输入流

        InputStream in = new FileInputStream(path);

        //获得输出流向客户端写内容

        ServletOutputStream out = response.getOutputStream();

        //文件拷贝的模板代码

        int len = 0;

        byte[] buffer = new byte[1024];

        while((len = in.read(buffer)) > 0){

            out.write(buffer, 0, len);

        }

        out.close();

        in.close();

    }

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

    }

}

猜你喜欢

转载自blog.csdn.net/young_1004/article/details/81276452