常用方法:
·常用响应头
refresh (自动刷新或跳转)
//设置响应头
response.addHeader("uname","admin")
//设置页面报错
//response.sendError(500);
response.sendError(404,"由于颜值过低,无法访问!")
//自动刷新 3秒钟刷新一次
response.setHeader("refresh","3");
//跳转 3秒后 跳转到百度
response.setHeader("refresh","3;http://www.baidu.com");
·响应数据
getWriter()—>获取字符流(只能响应回字符)
getOutputStream()—>获取字节流(能响应一切数据)
响应回的数据到客户端被浏览器解析。
注意:两者不能同时使用。java.lang.IllegalStateException:getWriter() has already been called for this response
setContentType() 设置数据的响应类型
·响应乱码问题
乱码问题:
服务器响应的数据也会经过网络传输,服务器端有一种编码方式,在客户端也存在一种编码方式,当两端使用的编码方式不同时则出现乱码
乱码情况:
getWriter()的字符乱码
对于getWriter()获取到的字符流,响应中文必定出现乱码,由于服务器端在进行编码时默认会使用ISO-8859-1格式的编码,该编码方式不支持中文
getOutputStream()字符乱码
对于getOutputStream()获取到的字节流,响应中文时,由于本身就是传输的字节,所以此时可能出现乱码,也可能正确显示
解决方案:
同时设置服务端和客户端的编码及响应类型:
response.setContentType(“text/html;charset=utf-8”);
总结:
要想解决响应的乱码,只需要保证使用支持中文的编码格式。并且保证服务器端和客户端使用相同的编码格式即可。
·响应图片
//获取项目在服务器中的真是路径
String realPath = request.getServletContext().getRealPath("/");
//得到图片的存放路径
String filePath = realPath + "/WEB-INF/images/jay.jsp";
//通过路径得到file对象
File fiel = new File(filePath);
//通过路径得到file对象
File file = new File(filePath);
//判断文件是否存在,且是一个标准文件
if(file.exists()&&file.isFile()){
//设置响应类型
response.setContentType("image/jepg");
//得到文件的输入流
InputStream in = new FileInputStream(file);
//得到字符输出流
ServletOutputStream out = response.getOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
}
} else {
//设置响应类型及编码
response.setContentType("text.html;charset=UTF-8");\
response.getWriter().write("<h2>文件不存在!</h2>");
response.getWriter().close();
}
·重定向
重定向是一种服务器指导,客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应。
与此同时,服务器给客户端一个地址(下次请求的地址response.sendRedirect(“url”)?,当客户端接收到响应后,立刻、马上、自动根据服务器给的地址,进行请求的发送第二个请求,服务器接收请求并作出响应,重定向完成。
request和response不共享