天天看点

关于web项目中的资源跳转

跳转包括两种方式: 转发 forward、重定向 redirect...

1.跳转包括两种方式:

  • 转发 forward
  • 重定向 redirect

2.两种方式的代码:

AServlet类:
//向request范围中存储数据
request.setAttribute("username","zhangsan");

//转发forward:一次请求
//request.getRequestDispatcher("/b").forward(request,response);

//另外一种跳转方式是重定向
//重定向redirect:两次请求
//执行到此处之后将这个路径相应给浏览器,浏览器又向服务器发送了一次全新的请求
response.sendRedirect("/prj_servlet_16_war_exploded/b");

BServlet类:
//从request范围中取数据
Object obj = request.getAttribute("username");
System.out.println(obj);

- 转发
    request.getRequestDispatcher("/b").forward(request,response);

- 重定向:
    response.sendRedirect(request.getContextPath() + "/b");      

3.转发和重定向的相同点和不同点:

- 相同点:
    都可以完成资源跳转

- 不同点:
    * 触发对象不同:
        转发是request对象触发的,重定向是response对象触发的
    * 请求次数不同
        转发是一次请求,浏览器地址栏上地址不会变化,重定向是两次请求,浏览器地址栏上的地址发生变化[/a-->/b]
    * 路径不同
        重定向的路径需要加webapp的根路径,转发是在本项目内完成资源跳转
    * 可跨范围不同
        重定向可以完成跨项目跳转,跨app跳转资源      

4.跳转的下一个资源可以是什么?

  • 跳转的下一个资源可以是web服务器中任何一种资源:可以是Servlet,也可以是html,也可以是JSP...

5.什么时候采用转发,什么时候采用重定向?[大部分情况下都使用重定向]

* 若想完成跨app跳转,必须使用重定向
* 若在上一个资源中向request范围中存储数据希望在下一个资源中从request范围中将数据取出必须使用转发
* 重定向可以解决浏览器的刷新问题      

6.重定向原理是什么?

a.response.sendRedirect("/jd/login");

b.程序执行到以上代码,将请求路径/jd/login反馈给浏览器,

c.浏览器自动又向web服务器发送了一次全新的请求:/jd/b

d.浏览器地址栏上最终显示的地址是:/jd/login