Response实例

Response部分方法介绍及实例

客户端浏览器每访问一次web服务器的页面都会提交一次请求,与request对象对应的是response对象,该对象可以用来对客户的请求做出响应,向客户端发送数据。输出的数据可以是各种数据类型,甚至是文件,这可以通过page指令的contentType属性或是response的setContentType()方法来设置。

工具:Myeclipse

一、JSP实现

实例1 页面重定向

 在Myeclipse中新建web project,在WebRoot中新建sendRedirectExample1.jsp,发布到Tomcat,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<body>
<%//页面重定向程序片
String url;
url=request.getParameter("goaddress");
if(url!=null) response.sendRedirect(url);
%>
<form name="form1" action="sendRedirectExample1.jsp" method="post" >
页面重定向:
<select name="goaddress" onchange="javascript:form1.submit()">
  <option value="">========请选择========</option>
  <option value="http://www.hnwlw.net">湖南省物流公共信息平台</option>
  <option value="http://www.56edu.com">湖南现代物流职业技术学院</option>
  <option value="http://www.hnii.gov.cn">湖南省信息化工作办公室</option>
  <option value="http://www.temco.com.cn">天工远科信息技术有限公司</option>
</select>
</form>
</body>
</html>

运行结果后,可以重新选择某个页面并跳转。

实例2 定时刷新页面

在WebRoot中新建refreshExamples2.jsp,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.text.SimpleDateFormat"%>
<html>
<head>
<title>定时刷新页面</title>
</head>
<body>
<%//设置刷新页面的时间,每隔1秒钟刷新一次
response.setHeader("refresh","1");
%>
当前的系统时间是:
<%//输出当前最新的时间
  Date thisDay=new Date();
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy'年'MM'月'dd'日' hh'时'mm'分'ss'秒'");
  out.print(sdf.format(thisDay));
%>
</body>
</html>

运行结果如下:

二、Servlet实现

实例3 使用PrintWriter流向客户端浏览器输出中文数据

在src下新建包yqq.request.study(此步骤可省略),在包中新建Servlet,取名ResponseDemo01,代码如下:

package yqq.request.study;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResponseDemo01 extends HttpServlet {

    private static final long serialVersionUID = 4312868947607181532L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        outputChineseByPrintWriter(response);//使用PrintWriter流输出中文
    }

    /**
     * 使用PrintWriter流输出中文
     * @param request
     * @param response
     * @throws IOException 
     */
    public void outputChineseByPrintWriter(HttpServletResponse response) throws IOException{
        String data = "中国";
        
        //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
        //response.setHeader("content-type", "text/html;charset=UTF-8");
        
        response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
        /**
         * PrintWriter out = response.getWriter();这句代码必须放在response.setCharacterEncoding("UTF-8");之后
         * 否则response.setCharacterEncoding("UTF-8")这行代码的设置将无效,浏览器显示的时候还是乱码
         */
        PrintWriter out = response.getWriter();//获取PrintWriter输出流
        /**
         * 多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为,模拟通过设置响应头控制浏览器行为
         * out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'/>");
         * 等同于response.setHeader("content-type", "text/html;charset=UTF-8");
         */
        out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'/>");
        out.write(data);//使用PrintWriter流向客户端输出字符
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

运行结果如下:

实例4 使用Response实现中文文件下载

 代码如下,需要注意的是 getRealPath("/images/测试测试.jpg")这个地方,我是在项目javaweb的文件夹下,创建images文件夹,导入了一个“测试测试.jpg”的图片

package yqq.request.study;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * @author gacl
 * 文件下载
 */
public class ResponseDemo02 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        downloadChineseFileByOutputStream(response);//下载中文文件
    }

    /**
     * 下载中文文件,中文文件下载时,文件名要经过URL编码,否则会出现文件名乱码
     * @param response
     * @throws FileNotFoundException
     * @throws IOException
     */
    private void downloadChineseFileByOutputStream(HttpServletResponse response)
            throws FileNotFoundException, IOException {
        String realPath = this.getServletContext().getRealPath("/images/测试测试.jpg");//获取要下载的文件的绝对路径
        String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名
        //设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
        response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
        InputStream in = new FileInputStream(realPath);//获取文件输入流
        int len = 0;
        byte[] buffer = new byte[1024];
        OutputStream out = response.getOutputStream();
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器
        }
        in.close();
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

运行结果如下:

 保存类型乱码,不知道为啥

参考资料 《java web轻量级开发全体验》

参考网址  http://www.cnblogs.com/xdp-gacl/p/3789624.html

代码是别人的,结果是自己跑的,主要为了熟悉环境搭建和项目流程

原文地址:https://www.cnblogs.com/myfrank/p/7238433.html