场景描述:
一个页面请求传到服务器上,如果服务器将这个请求转发到另外一个服务地址上,并且不告诉浏览器我做了跳转,这样的话,浏览器实际上访问的是另外一个服务器上的内容,而浏览器自己却是不知道的。
好比X在A商家网上买了一件东西,然而A商家是没有任何商品的,A又从B商家购买X买他的商品,并且收货地址写的是X的地址。这样,X可以收到货,然而却是B商家发的货,可是X却不知道,认为是B商家的商品,所以B商家是对于X来说是不可见的。
案例:http://www.honglonglong.com?pic=.jpg
分析:访问此地址可以返回不同的图片。类似上面的例子一样,不同的是X想要一张图片,具体是什么图片X不知道,却由B随机发送,然而请求地址却是A的地址。
代码:在JSP中,我们经常需要跳转到某个页面,这时常用的方法是来自Servlet的方法
response.sendRedirect("URL");
这种方法简单易用,但是因为sendRedirect方法的效率不高,所以软件公司常用转发方法:
request.getRequestDispatcher("URL").forward(request, response);
采用这种方法虽然比sendRedirect方法复杂了点,但是这种方法的效率高,而且request的对象还可以在下一页面继续使用,例如,
request.setAttribute("name","jack");
request.getRequestDispatcher("index.jsp").forward(request, response);
然后我们就可以在index.jsp中,用String val = request.getAttribute("name")得到值。
用sendRedirect方法传值时,如,
response.sendRedirect("index.jsp?name=jack"),
然后在index.jsp中,用String val = request.getParameter("name")得到值。
用sendRedirect方式跳转到某一页面时,地址栏显示的是这一页面的URL,而用转发的方式时,地址栏显示的是前一页面的URL。
小小原创