zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    HttpWebRequest中的ContentType详解
    c# 创建Windows服务
    转载 Url编码
    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。
    IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
    Response.ContentLength获取文件大小
    unable to instantiate activity...
    查看android-support-v4.jar引出的问题
    导入项目 R.java没有
    初识python: 局部变量、全局变量
  • 原文地址:https://www.cnblogs.com/myfrank/p/7238433.html
Copyright © 2011-2022 走看看