###什么是Response HttpServletResponse对象服务器的响应,这个对象封装了向客户端发送数据,发送响应头,发送响应状态码的方法.html
####发送数据的两个方法,注意区别:web
###向浏览器输出中文浏览器
####使用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.用重定向技术,地址栏会发生变化,用户登陆和显示购物车时,一般会用重定向技术