Response对象

###什么是Response HttpServletResponse对象服务器的响应,这个对象封装了向客户端发送数据,发送响应头,发送响应状态码的方法.html

####发送数据的两个方法,注意区别:web

  • getOutputStream 字节流
  • getWriter 字符流

###向浏览器输出中文浏览器

####使用OutPutStream输出中文缓存

response.setHeader("content-type","text/html;charset=UTF-8");
String data = "中文";
OutputStream out = response.getOutputStream();
out.write(data.getBytes("UTF-8");
//程序以什么码表输出,程序就必定要控制浏览器以什么码表打开

out.write("<meta http-equiv='content-type';content='text/html;charset=UTF-8'>".getBytes());
//模拟http响应头 控制显示行为

####使用PrintWriter实现中文输出服务器

response.setCharacterEncoding("UTF-8");
response.setHeader("content-type","text/html;charset=UTF-8");
//response.setContentType("text/html;charset=UTF-8");
String data="中文"
PrintWriter out = response.getWriter();
out.write(data);

###文件下载jsp

String path = this.getServletContext().getRealPath("/WEB-INF/classes/download/中文图片.jpg");
        String fileName = path.substring(path.lastIndexOf("/") + 1);
        // 若是下载文件时中文名称,则文件名需通过URL编码
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setHeader("content-disposition", "attachment;fileName=" + fileName);
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream(path);
            int len = 0;
            byte buffer[] = new byte[1024];
            out = response.getOutputStream();
            while ((len = in.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            in.close();
        }

###用refresh控制浏览器刷新 ####message.jsp页面增长如下代码ui

页面将在三秒后实现跳转
	<%
    String message = (String) request.getAttribute("message");
    out.write(message);
%>

####servlet增长如下代码this

String message = "<meta http-equiv='refresh' content='3;url=/test-web/index.jsp'>";
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        request.setAttribute("message", message);
        request.getRequestDispatcher("message.jsp").forward(request, response);

####新建index.jsp中增长如下代码编码

<h2>
		这是跳转后的界面
	</h2>

###用expires控制浏览器缓存url

response.setDateHeader("expires",System.currentTimeMillis()+1000*3600);
String data = "aaa";
response.getWriter().write(data);

###response开发的一些细节 1.getOutputStream和getWrite方法分别用于获得输出二进制数据,输出文本数据的servletOutPutStream和PrintWriter对象 2.getOutPutStream和getWriter这两个方法互相排斥,调用其中的任何一个方法后,就不能再调用另外一方法,Java.lange.IllegalStateException: getOutStream() has already been called for this response 3.Servlet的OutPutStream和PrintWriter对象中写入的数据将被servlet引擎从response中取出,servlt引擎将这些数据做为消息响应的正文,而后再与响应状态行和鸽子响应头组合后输出到客户端。
4.servlet的service方法结束后,servlet引擎将检查getWrite或getOutputStream方法返回的输出流对象是否已经调用过close方法,若是没有,servlet引擎将调用close方法关闭该输出流对象。

###response实现请求重定向 请求重定向是指,一个web资源受到客户端请求后,通知客户端去访问另一个资源。

应用场景:用户登陆(地址栏变化提示用户)    
实现方式:response.setRedirect()
实现原理:response.setStatus("302");
    response.setHeader("location","/day06/index.jsp");
    response.sendRedirect("/day06/index.jsp");

重定向的特色:
    1.浏览器会向服务器发送两次,意味着就有两对request\response
    2.用重定向技术,地址栏会发生变化,用户登陆和显示购物车时,一般会用重定向技术
相关文章
相关标签/搜索