Web资源收到客户端获取RequestDispatcher对象的方法方法及方法介绍

优采云 发布时间: 2021-08-18 23:05

  Web资源收到客户端获取RequestDispatcher对象的方法方法及方法介绍

  当一个Web资源收到客户端的请求时,如果想让服务器通知另一个资源来处理请求,那么可以通过RequestDispatcher接口的一个实例对象来实现。 ServletRequest接口定义了获取RequestDispatcher对象的方法,如表1所示。

  表1获取RequestDispatcher对象方法声明函数说明的方法

  RequestDispatcher getRequestDispatcher(字符串路径)

  返回封装了某个路径指定的资源的RequestDispatcher对象。其中,参数路径必须以“/”开头,用于表示当前Web应用程序的根目录。需要注意的是,WEB-INF 目录的内容对于 RequestDispatcher 对象也是可见的。所以传递给getRequestDispatcher(String path)方法的资源可以是WEB-INF目录下的一个文件

  获取RequestDispatcher对象后,最重要的工作就是通知其他Web资源处理当前的Servlet请求。为此,RequestDispatcher 接口定义了两个相关的方法,如表 2 所示。

  表2 RequestDispatcher接口的方法声明函数说明

  forward(ServletRequest 请求,ServletResponse 响应)

  此方法用于将请求从 Servlet 传递到另一个 Web 资源。在 Servlet 中,您可以对请求进行初步处理,然后通过调用该方法将请求传递给其他资源进行响应。需要注意的是,这个方法必须在响应提交给客户端之前调用,否则会抛出IllegalStateException

  include(ServletRequest 请求,ServletResponse 响应)

  该方法用于收录其他资源作为当前响应内容

  请求转发在 RequestDispatcher 接口中。 forward()方法可以实现请求转发,include()方法可以实现请求收录。本节以请求转发为例讲解forward()方法的使用。

  在Servlet中,如果当前Web资源不想处理请求,可以通过forward()方法将当前请求传递给其他Web资源进行处理。这种方法称为请求转发。请求转发的工作原理如图1所示。

  从图1可以看出,当客户端访问Servlet1时,可以通过forward()方法将请求转发到其他Web资源。其他Web资源处理完请求后,直接将响应结果返回给客户端。

  了解了forward()方法的工作原理后,下面通过一个案例来演示forward()方法的使用。在servletDemo02项目的com.mengma.request包中创建一个名为RequestForwardServlet的Servlet类。该类使用 forword() 方法将请求转发到一个新的 Servlet 页面,如下所示。

  

  图 1 forward() 方法的工作原理

  

package com.mengma.servlet;

import java.io.IOException;

import javax.servlet.*;

import javax.servlet.http.*;

public class RequestForwardServlet extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

request.setAttribute("username", "张三"); // 将数据存储到request对象中

RequestDispatcher dispatcher = request.getRequestDispatcher("/ResultServlet");

dispatcher.forward(request,response);

}

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {

doGet(request,response);

}

}

  在RequestForwardServlet中,通过forward()方法,将当前的Servlet请求转发到ResultServlet页面,在com.mengma.request包中写入了一个名为ResultServlet的Servlet类。该类用于获取RequestForwardServlet类中的存储,输出request对象中的数据,ResultServlet类的代码实现如下所示。

  

package com.mengma.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class ResultServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

String username = (String) request.getAttribute("username");

if (username != null) {

out.println("用户名:" + username + "

");

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

  启动Tomcat服务器,在浏览器地址栏输入地址:8080/servletDemo02/RequestForwardServlet访问RequestForwardServlet,浏览器显示结果如图2所示。

  

  图 2 运行结果

  从图2中可以看出,RequestForwardServlet的请求路径依然显示在地址栏中,但是浏览器在ResultServlet中显示了要输出的内容。这是因为请求转发是在服务器内部发生的一种行为。 RequestForwardServlet 到 ResultServlet 的请求是一个请求,请求属性可以用于请求中的数据共享。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线