servlet-03-重定向/转发

1、重定向

浏览器向服务器发请求,服务器返回一个302的状态码以及location的消息头,浏览器接受到的302之后,会立即向location指向的地址发新的请求

如何重定向

//url:重定向的目的地
response.sendRedirect(String url);

编程注意点:

a. 重定向之前,不能调用out.close()或者out.flush()方法

b. 重定向之前,会清空response缓存中的数据

特点:

a.重定向的地址是任意的,可以跨应用,也可以跨服务

b.重定向之后,浏览器的地址会发生改变

2、转发

一个web组件将未做完的事情交给另外一个web组件继续完成。通常情况是servlet负责取数据,jsp负责展示数据

如何转发

step1:将数据绑定到request上

//name:绑定名  obj:绑定值
request.setAttribute(String name,Object obj);
//根据绑定名获取绑定值
Object:request.getAttribute(String name);
注:绑定名若写错,返回null

step2:获取转发器

//url:转发目的地
RequestDispatcher rd=request.getRequestDispatcher(String url);

step3:转发

rd.forward(request,response);

转发的编程注意点:

a. 转发之前不能调用out.close()或者out.flush()方法

b. 转发之前,服务器会清空response对象中的缓存数据

转发的特点:

a. 转发之后,浏览器地址栏的地址不会发生改变

b. 只能在同一应用内部转发,不能跨应用,也不能跨服务

c. 转发之间的组件共享请求对象与响应对象

3、路径问题

a. 链接<a href="del.do"></a>

b. 表单<form action="update.do"></form>

c. 重定向  response.sendRedirect("list.do");

d. 转发   request.getRequestDispatcher("list.jsp");

相对路径:

    不以“/”开头的路径,比如“del.do”、“list.do”,需要计算当前组件路径与目标路径的关系

绝对路径:

    以“/”开头的路径,比如“/servlet01/del.do”,像链接、表单、重定向:以“/”开头,从应用名开始写

    转发:以“/”开头,从应用名之后开始写

建议:采用绝对路径写法,更安全

原文地址:https://www.cnblogs.com/xslzwm/p/9667506.html