ForwardåRedirect代表äºä¸¤ç§è¯·æ±è½¬åæ¹å¼ï¼ç´æ¥è½¬ååé´æ¥è½¬åï¼åºå«å¨äºï¼
1ãé´æ¥è½¬åæ¹å¼(Redirect)ï¼ææ¶ä¹å«éå®åï¼å®ä¸è¬ç¨äºé¿å ç¨æ·çéæ£å¸¸è®¿é®ãä¾å¦ï¼ç¨æ·å¨æ²¡æç»å½çæ åµä¸è®¿é®åå°èµæºï¼Servletå¯ä»¥å°è¯¥HTTP请æ±éå®åå°ç»å½é¡µé¢ï¼è®©ç¨æ·ç»å½ä»¥åå访é®ãå¨Servletä¸ï¼éè¿è°ç¨response对象çSendRedirect()æ¹æ³ï¼åè¯æµè§å¨éå®å访é®æå®çURLï¼ç¤ºä¾ä»£ç å¦ä¸ï¼ã
......2ãç´æ¥è½¬åæ¹å¼(Forward)ç¨çæ´å¤ä¸äºï¼ä¸è¬è¯´ç请æ±è½¬åæçå°±æ¯ç´æ¥è½¬åæ¹å¼ãWebåºç¨ç¨åºå¤§å¤ä¼æä¸ä¸ªæ§å¶å¨ãç±æ§å¶å¨æ¥æ§å¶è¯·æ±åºè¯¥è½¬åç»é£ä¸ªä¿¡æ¯èµæºãç¶åç±è¿äºä¿¡æ¯èµæºå¤ç请æ±ï¼å¤çå®ä»¥åè¿å¯è½è½¬åç»å¦å¤çä¿¡æ¯èµæºæ¥è¿åç»ç¨æ·ï¼è¿ä¸ªè¿ç¨å°±æ¯ç»å ¸çMVC模å¼ã
......æ»ç»ï¼
ForwardåRedirect代表äºä¸¤ç§è¯·æ±è½¬åæ¹å¼ï¼ç´æ¥è½¬ååé´æ¥è½¬åã对åºå°ä»£ç éï¼åå«æ¯RequestDispatcherç±»çforward()æ¹æ³åHttpServletRequestç±»çsendRedirect()æ¹æ³ã
对äºé´æ¥æ¹å¼ï¼æå¡å¨ç«¯å¨ååºç¬¬ä¸æ¬¡è¯·æ±çæ¶åï¼è®©æµè§å¨ååå¦å¤ä¸ä¸ªURLååºè¯·æ±ï¼ä»èè¾¾å°è½¬åçç®çãå®æ¬è´¨ä¸æ¯ä¸¤æ¬¡HTTP请æ±ï¼å¯¹åºä¸¤ä¸ªrequest对象ã
对äºç´æ¥æ¹å¼ï¼å®¢æ·ç«¯æµè§å¨åªååºä¸æ¬¡è¯·æ±ï¼Servletæ请æ±è½¬åç»ServletãHTMLãJSPæå
¶å®ä¿¡æ¯èµæºï¼ç±ç¬¬2个信æ¯èµæºååºè¯¥è¯·æ±ï¼ä¸¤ä¸ªä¿¡æ¯èµæºå
±äº«åä¸ä¸ªrequest对象ã
从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
.从效率来说
forward:高.
redirect:低.
摘自倒霉熊lujin回答。