为什么需要Servlet之间的交互?
1.Web组件(Servlet/JSP)的交互:
Web组件之间的跳转,数据共享.
1.ListServlet:
1.接收请求参数
2.调用业务逻辑处理请求 List<Student> list=dao.list()
3.直接通过输出流对象输出到list.jsp页面,负责输出所有的学生信息 req.getRequestDispatcher("/list.jsp").forward(req,resp)
把student传递jsp页面,跳转到jsp,负责输出student信息
2.list.jsp
1.获取到student对象
2.将student信息展示
3.把参数传递给DeleteServlet
3.DeleteServlet
1.获取请求参数
2.调用业务逻辑处理请求
3.跳转到ListServlet页面 resp.sendRedirect("/listServlet")(重新查询所有的学生信息,重新把信息转发到list.jsp)
![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426192229808-309800312.jpg)
Web之间的跳转和信息共享
1.Web组件之间的跳转方式
*请求转发(forward) req.getRequestDispatcher("str").forward(res,resp)
*重定向(redirect) resp.sendRedirect("str")
*请求包含(include)
2.请求转发
*从Servlet1,请求转发到Servlet2. Servlet1完成一部分功能,再跳转到Servlet2继续完成剩下的功能.
1.语法:
req.getRequestDispatcher("str").forward(req,resp);
参数: path,表示跳转的目标的路径(资源的名称)
注意: 不要忘了forward
2.特点:
1.请求转发只发出一次请求
2.地址栏不会发生变化
3.响应效果由Servlet2决定
4.请求转发不可以跨域共享资源,只能跳转到当前应用的资源
5.共享同一个请求的资源
6.请求转发可以访问WEB-INF下的资源
![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426194815175-1144608610.png)
URL重定向
1.语法:
respond.sendRedirect(String url)
2.特点:
1.浏览器的地址栏发生改变
2.重定可以跨区域访问,向发出两次请求
3.重定向可以访问外部资源
4.重定向不可以访问WEB-INF下的资源
5.因为重定向是两次请求,所以不可以共享请求资源
6.最终响应给浏览器的效果由Servlet2决定
![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426202708161-109977267.png)
Servlet三大作用域对象
1.目的: 共享数据
1.request
类型:HttpServletRequest
每一个请求都是一个新的request,如果想共享同一请求的资源,只能使用请求转发
2.session
类型:HttpSession
每一次会话都是一个新的Session对象,如果想在一次对话多次请求中共享数据,只能使用Session
3.application
类型: ServletContext
应用对象,Tomcat启动到Tomcat结束表示一个应用,在一个应用中有且只有一个application对象,作用整个Web应用,可以实现多次会话之间的数据共享
作用域对象如何共享数据:
1.设置作用域中的共享数据.
作用域对象.setAttribute(String name,Object value)
2.获取作用域的共享数据
作用域对象.getAttribute(String name)
3.删除作用域的共享数据
作用域.removeAttribute(String name)
注意:在哪个作用域中设置值,就只能从该作用域中获取值