问题
前端发送一个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);
}
}
参考文档:(11条消息) servlet的后台页面跳转和ajax的页面跳转_tao911110的博客-CSDN博客