您的位置:首页 > 其它

Response对象

2015-11-11 00:00 351 查看
摘要: java servlet Response对象

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

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

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);

###文件下载

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页面增加以下代码

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

####servlet增加以下代码

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控制浏览器缓存

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.用重定向技术,地址栏会发生变化,用户登录和显示购物车时,通常会用重定向技术
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: