ToB企服应用市场:ToB评测及商务社交产业平台

标题: RequestDispatcher具有什么功能呢? [打印本页]

作者: 东湖之滨    时间: 2022-6-23 14:10
标题: RequestDispatcher具有什么功能呢?
转自:
http://www.java265.com/Servlet/202206/266.html
下文笔者讲述RequestDispatcher的功能简介说明,如下所示:
RequestDispatcher的功能简介
  1. RequestDispatcher是一个Web资源的包装器
  2. 可以用来把当前request传递到该资源
  3. 或把新的资源包括到当前响应中
  4. RequestDispatcher接口中定义了两个方法:
  5.    include/forward
复制代码
例:
  1. 由<jsp:include>只能指定固定的jsp文件名
  2. 不能动态指定jsp文件名
  3. 我们需要把<jsp:include>翻译为Java code – RequestDispatcher.include();
  4. 例:
  5.     <% request.getRequestDispatcher(filename).include(request, response); />
复制代码
  1. 服务器端的重定向可以有两种方式:
  2.      1.使用HttpServletResponse的sendRedirect()方法
  3.          2.使用RequestDispatcher的forward()方法.
  4. HttpServletResponse.sendRedirect()方法:
  5.    将响应定向到参数location指定的、新的URL
  6.    location可以是一个绝对的URL
  7.     如 response.sendRedirect("http://java265.com")也可以使用相对的URL
  8.     如果location以“/”开 头,则容器认为相对于当前Web应用的根
  9.      否则,容器将解析为相对于当前请求的URL
  10.     这种重定向的方法,将导致客户端浏览器的请求URL跳转
  11.     从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现
  12. RequestDispatcher.forward()方法:
  13.     将当前的request和response重定向到该RequestDispacher指定的资源
  14.     使用这种操作方式,可避免一个业务操作在后台直接进行操作
复制代码
  1. 注意:
  2. 只有在尚未向客户端输出响应时才可以调用forward()方法
  3. 如果页面缓存不为空,在重定向前将自动清除缓存
  4. 否则将抛出一个IllegalStateException异常。
  5. RequestDispatcher接口所定义的forward()方法
  6.    可以将HTTP请求转送给其他Web资源(如Servlet、JSP或HTML)进行处理
  7.   并产生HTTP回应。
  8. 调用forward()方法时必须注意下列两点
  9. 1.在HTTP回应被“确认”(committed)以前才能调用forward()方法(这里的“确认”是指将HTTP回应的内容主体送回用户端,
  10.   否则将拋出IllegalStateException异常。
  11. 2.调用forward()方法后,原先存放在HttpResponse对象中的内容将会自动被清除
  12.   include()方法将把Request Dispatcher资源的输出包含到当前输出中
  13. RequestDispatcher 接口的include()方法与forward()方法非常类似
  14.    惟一的区别在于
  15.      利用include()方法将HTTP请求转送给其他Servlet 后
  16.      被调用的Servlet虽然可以处理这个HTTP请求,但是最后的主导权仍然是在原来的Servlet
  17.              换言之,被调用的Servlet如果产生任何 HTTP回应,将会并入原来的HttpResponse对象。
  18. 例:
  19.    RequestDisPatcher   dispatcher=requset.getRequestDisPatcher("/uservlet2)"
  20.     这句代码就是说将当前servlet的数据转发到uservlet2这个servlet里
  21.     它是服务器端转发
  22.     一般还要把request和response传过去
  23.    RequestDisPatcher   dispatcher=requset.getRequestDisPatcher(""/uservlet2)";
  24.     dispatcher.forward(request,   response);
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4