Response對象
設置狀態碼
void setStatus(int sc)
設置狀態碼
設置響應頭(key:value)
一個key對應一個value或一個key對應多個value
void setHeader(String name, String value)
(一個key對應一個value)經常使用
setHeader(“aa”,”bb”);
setHeader(“aa”,”cc”);
結果:aa:ccvoid addHeader(String name, String value)
(一個key對應多個value)
addHeader(“aa”,”bb”);
addHeader(“aa”,”cc”);
結果:aa:bb,cc
設置響應體
ServletOutputStream getOutputStream()
字節輸出流PrintWriter getWriter()
字符輸出流
重定向
- 登錄頁面重定向
- 狀態碼302,響應頭
loaction
Api
方法一:
// 設置302的狀態碼
response.setStatus(302);
// 設置地址
response.setHeader("location", "/day10/response/login.html");
方法二:
// response對象提供了一個方法,可以完成重定向。
response.sendRedirect("/day10/response/login.html");
案例
登陸頁面,用戶名和密碼的登陸頁面,用戶名和密碼都是admin,
如果有一個不是,重定向到登陸頁面,重新登陸。
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/Day21/login" method="post">
<table border="1" width="50%">
<tr>
<td>輸入姓名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>輸入密碼</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提交"> </td>
</tr>
</table>
</form>
</body>
</html>
LoginServlet
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(username)&&"admin".equals(password)){
response.getWriter().write("success");
}else{
//// 方法一
// //設置狀態碼
// response.setStatus(302);
//// 設置地址
// response.setHeader("location", "/Day21/response/login.html");
// 方法二
response.sendRedirect("/Day21/response/login.html");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
頁面定時刷新(頁面讀秒操作)
響應頭
refresh
案例
public class RefreshServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("<h1>頁面將在5秒後跳轉</h1>");
//通過refresh頭完成刷新頁面
response.setHeader("refresh", "5;url=/Day21/response/login.html");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
上面有一個問題是秒數不能動態改變,我們可以換另外一個方法實現,在Html中實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 設置請求頭 -->
<meta http-equiv="refresh" content="5;url=/Day21/response/login.html">
<title>Insert title here</title>
</head>
<body onload="run()">
<h2>
頁面將在<span id="spanId">5</span>秒後跳轉
</h2>
</body>
<script type="text/javascript">
/*
頁面一加載執行onload()
*/
var x=5;
function run(){
var span=document.getElementById("spanId");
span.innerHTML=x;
x--;
window.setTimeout("run()", 1000);
}
</script>
</html>
禁用瀏覽器的緩存(三個頭信息)
一般應用在:網銀系統
Cache-Control : no-cache
Expires: -1 值是日期類型(setDateHeader())
Pragma : no-cache
案例
public class CEPServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
// 這裏是設置dateheader
response.setDateHeader("Expires", -1);
Date date=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = simpleDateFormat.format(date);
response.getWriter().write(str);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
向頁面輸出中文(亂碼問題)
字節流
/**
* 字節輸出中文
* * 如果不設置頭的話,不一定會亂碼,看瀏覽器配置
* * 解決辦法
* 1.設置瀏覽器打開文件時所採用的編碼
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* 2.獲取字符串byte數組時編碼和打開文件時編碼一致。
* "亂碼測試".getBytes("UTF-8")
* @throws IOException
*/
public void run1(HttpServletResponse response) throws IOException{
// 設置瀏覽器打開文件時編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 獲取字節輸出流
OutputStream os = response.getOutputStream();
// 輸出中文
os.write("亂碼測試".getBytes("UTF-8"));
}
字符流
/**
* 字符輸出中文
* * 肯定亂碼
* response緩衝區的編碼,默認值ISO-8859-1
* 方法一:
* 1. 設置response緩衝編碼
* response.setCharacterEncoding("UTF-8");
* 2。 設置瀏覽器打開文件所採用的編碼
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* 方法二:
* 簡寫方式
* response.setContentType("text/html;charset=UTF-8");
*
* @param response
* @throws IOException
*/
public void run2(HttpServletResponse response) throws IOException{
// 設置response緩衝區的編碼
//response.setCharacterEncoding("UTF-8");
// 設置瀏覽器打開文件所採用的編碼
//response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 簡寫的形式(等於上面兩句)
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("哈羅臥得");
}