問題
前端發送一個axios的請求驗證,想要驗證成功后跳轉頁面
axios.post('http://localhost:8080/javaWeb/RegisController', params)
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//...
this.getServletContext().getRequestDispatcher("/home.html").forward(req, resp);
}

可以看到請求標頭和響應體都已經返回,但是頁面就是沒有跳轉,還是停留在原來的頁面
原因
原因其實也不難,主要是servlet拿到的是ajax發送過來的request,也就是說這個請求不是瀏覽器請求的,而是ajax請求的,所以,servlet對request進行請求轉發或重定向都不能影響瀏覽器的跳轉…..也就出現了我們遇到的請求轉發和重定向失效的問題.
解決問題
不管正確還是錯誤,都應該返回一個值給ajax,讓ajax去跳轉或干其他的事.使用ajax本來就是為了局部刷新網頁,而不是跳轉
axios.post('http://localhost:8080/javaWeb/RegisController', params)
.then(response => {
//成功則改變路徑
location.href = "./home.html"
}, reason => {
alert('驗證碼錯誤,請重試!');
//驗證碼
addData();
})
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (判斷條件){
//響應狀態碼
resp.setStatus(200);
}else{
resp.setStatus(404);
}
}