我才刚开始学习java,学到web这部分一头雾水去不掉,东西说难不难,说简单又不简单。看别人的代码一看就会,轮到自己写代码就手足无措,不知道从哪里下手。
有一个问题困惑我好长时间了,问了几个稍微懂点的,因为是稍微懂点的,反而搞的我像是被水泼一样。
在servlet里面,用于页面跳转时有时候用:re = resquest.getRequestDispatcher(String path);
有时候又用:response.sendRedirect(String location);
这两种方法似乎都能够向跳转的文件传递参数,比如request那个方法path可以等于“index.jsp?num”,而response那个方法location又可以等于‘“index.jsp?num”+num’不懂,这两种用于跳转有什么区别,那两种参数传递的过程又为什么不同呢,长的好像一样。另外,上边的对象re.forward(request,response);又是干什么的呢,我想这个想了好长时间了,我觉得这就好像一道面试题一样,我真的很想全面,详细的把这些问号都去掉。
第一次上javaeye,不会提问,大家见谅,但是希望各位大虾可以帮帮我,不胜感激!!
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
sendRedirect: 这个只是跳转,但是没有把查询参数带上,如果你想带参数的话,就得自己构造URL,就是那个location.
forward, 这个你应该知道了吧?就是把所有参数都带上。
另一个不知道是什么意思, 没用过。看那个参数,猜测是只能在当前服务器里跳转,后面的参数path应该只是URI+参数,不是完整的URL,因为没有服务器名部分。只是猜测,不知道对不对。
一般来说:
1.
resquest.getRequestDispatcher(String path).forward(request,response);这个是内部跳转,也就是说请求带上参数(上一个页面带过来的参数)
2.
response.sendRedirect(String location); 这个是外部跳转,也叫重定向。请求不带参数,重新连接一个url