重定向和转发的区别及应用

重定向

重定向过程:客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

重定向到某一个页面。 response.sendRedirect(“xx.jsp”); 最先开始程序员们使用的重定向方法:response.setStatus(302);response.addHeader(“Location”,”URL”); sendRedirect()这个方法属于response的方法,当这个请求处理完之后,看到response.senRedirect(),将立即返回客户端,然后客户端再重新发送一个请求,去访问xx.jsp页面。

重定向流程为:客户端请求—-响应,遇到sendRedirect(),返回响应—-客户端再次请求xx.jsp页面—-响应。 这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。

总结一下:在response.sendRedirect(“xx.jsp”);里面是两个请求,两个响应,地址栏会发生改变。

当多次forward时会报以下错误: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [com.mysql.jdbc.ProfilerEventHandlerFactory]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. 主要意思是这个应用程序已经被停止了,没有办法加载[com.mysql.jdbc.ProfilerEventHandlerFactory],并终止导致非法访问的线程。

经验分享 程序员 微信小程序 职场和发展