request-转发的原理***
- (1)什么是请求转发
浏览器访问Servlet1,Servlet1将参数处理得到结果,没有直接返回给浏览器,而是将结果带给Servlet2,由Servlet2再处理之后返回给浏览器 - (2)类比
面试者的简历给前台,前台收到之后转给面试官
(3)在哪里使用?
搜索功能,还有很多地方。
request-转发的代码实现
以下代码需要结合原理图理解 ,以后第二次Srevlet是使用jsp替换,因为jsp组装数据的效率更高。
- (1)方法
setAttribute(key,value) 存一个key-value数据到请求中
getAttribute(key) 根key将对应的value取出来
back 后退 forward前进
getRequestDispatcher("/demo7").forward(request, response);
src\com\wzx\pack04_dispatch\Demo06Servlet.java
@WebServlet("/demo06")
public class Demo06Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//将"游戏本"添加到请求中,携带到下一个servlet
//1 存数据
request.setAttribute("name","游戏本");
//2 携带到下一个servlet,只能使用转发
request.getRequestDispatcher("/demo07").forward(request, response);
}
}
src\com\wzx\pack04_dispatch\Demo07Servlet.java
@WebServlet("/demo07")
public class Demo07Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1 取数据
String name = (String) request.getAttribute("name");
//2 组装标签后,响应给浏览器
response.setContentType("text/html;charset=utf-8");
response.getWriter().println("<font color='red'>"+name+"</font>");
}
}
request-转发和重定向的区别***
(1)重定向
两次请求,两次响应
重定向不携带数据
重定向地址栏发生改变
(2)转发
一次请求,一次响应
转发需要携带数据
转发地址栏不会发生变化