百木园-与人分享,
就是让自己快乐。

RequestDispatcher具有什么功能呢?

转自:

http://www.java265.com/Servlet/202206/266.html

下文笔者讲述RequestDispatcher的功能简介说明,如下所示:

RequestDispatcher的功能简介

RequestDispatcher是一个Web资源的包装器
 可以用来把当前request传递到该资源
 或把新的资源包括到当前响应中

RequestDispatcher接口中定义了两个方法:
   include/forward

例:

由<jsp:include>只能指定固定的jsp文件名
 不能动态指定jsp文件名
 我们需要把<jsp:include>翻译为Java code – RequestDispatcher.include(); 
 
 例:
    <% request.getRequestDispatcher(filename).include(request, response); /> 
服务器端的重定向可以有两种方式:
     1.使用HttpServletResponse的sendRedirect()方法
	 2.使用RequestDispatcher的forward()方法.

HttpServletResponse.sendRedirect()方法:
   将响应定向到参数location指定的、新的URL
   location可以是一个绝对的URL
    如 response.sendRedirect(\"http://java265.com\")也可以使用相对的URL
    如果location以“/”开 头,则容器认为相对于当前Web应用的根
     否则,容器将解析为相对于当前请求的URL
    这种重定向的方法,将导致客户端浏览器的请求URL跳转
    从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现

RequestDispatcher.forward()方法:
    将当前的request和response重定向到该RequestDispacher指定的资源
    使用这种操作方式,可避免一个业务操作在后台直接进行操作
注意:
 只有在尚未向客户端输出响应时才可以调用forward()方法
 如果页面缓存不为空,在重定向前将自动清除缓存
 否则将抛出一个IllegalStateException异常。

RequestDispatcher接口所定义的forward()方法
   可以将HTTP请求转送给其他Web资源(如Servlet、JSP或HTML)进行处理
  并产生HTTP回应。

调用forward()方法时必须注意下列两点
1.在HTTP回应被“确认”(committed)以前才能调用forward()方法(这里的“确认”是指将HTTP回应的内容主体送回用户端,
  否则将拋出IllegalStateException异常。

2.调用forward()方法后,原先存放在HttpResponse对象中的内容将会自动被清除
  include()方法将把Request Dispatcher资源的输出包含到当前输出中

RequestDispatcher 接口的include()方法与forward()方法非常类似
   惟一的区别在于
     利用include()方法将HTTP请求转送给其他Servlet 后
     被调用的Servlet虽然可以处理这个HTTP请求,但是最后的主导权仍然是在原来的Servlet
	     换言之,被调用的Servlet如果产生任何 HTTP回应,将会并入原来的HttpResponse对象。
 
 例:
   RequestDisPatcher   dispatcher=requset.getRequestDisPatcher(\"/uservlet2)\" 
    这句代码就是说将当前servlet的数据转发到uservlet2这个servlet里 
    它是服务器端转发 
    一般还要把request和response传过去 
   RequestDisPatcher   dispatcher=requset.getRequestDisPatcher(\"\"/uservlet2)\"; 
    dispatcher.forward(request,   response); 

来源:https://www.cnblogs.com/java265/p/16334387.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » RequestDispatcher具有什么功能呢?

相关推荐

  • 暂无文章