1.HttpServletRequest对象
用来封装HTTP响应信息
由于HTTP响应信息分为响应行,响应头,响应体三部分,所以HttpServletRequest接口中定义了向客户端发送响应状态码,响应消息头,响应消息体的方法。
通过response设置响应行:状态码
发送状态码的方法:response.setStatus(int status); //参数是状态码
通过response设置响应头
setHeader(String name,String value)
1)Location,指定响应的路径,需要与状态码302配合使用,完成跳转
demo:servlet1没有响应,告诉客户端去重定向到servlet2
但是上面的写法太麻烦,可以使用response.sendRedirect("/day16/servlet2")来重定向到servlet2
2)Refresh,定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页
使用js实现定时跳转页面,在success.html页面中实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload=function(){
var time=5;
var secondEle=document.getElementById("second")
var timer=setInterval(function(){
secondEle.innerHTML=time;
time--;
if (time==0) {
clearInterval(timer);
location.href="https://www.baidu.com";
}
},1000)
}
</script>
</head>
<body>
恭喜,登陆成功,<span id=second style="color:red">5</span>秒后自动跳转,如不跳转,请点击<a href="https://www.baidu.com">这里</a>
</body>
</html>
通过response设置响应体
response.getWriter().write("hello");
响应体中存在中文乱码问题的解决
2.文件下载
文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端
package com.sh.FileDownLoad;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 文件的下载
*
* @author Administrator
*
*/
public class FileDownTest extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.获取要下载的 文件的绝对路径
String realPath = this.getServletContext().getRealPath("简介.jpg");
// 2.获取要下载的文件名
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
// 3.设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 4.获取输入流
FileInputStream in = new FileInputStream(realPath);
ServletOutputStream out = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024 * 10];
while ((len = in.read(b)) != -1) {
out.write(b, 0, len); 将缓冲区的数据输出到客户端浏览器
}
in.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}