Servlet中的RequestDispatcher示例图解

  1. RequestDispatcher接口
  2. RequestDispatcher接口的方法
    1. 前进方法
    2. 包含方法
  3. 如何获取RequestDispatcher的对象
  4. RequestDispatcher接口的示例

RequestDispatcher接口提供了将请求分派到另一个资源的功能, 该资源可能是html, servlet或jsp。该接口还可以用于包含其他资源的内容。它是servlet协作的一种方式。

RequestDispatcher接口中定义了两种方法。

RequestDispatcher接口的方法

RequestDispatcher接口提供两种方法。他们是:

  1. public void forward(ServletRequest请求, ServletResponse响应)引发ServletException, java.io.IOException:将请求从Servlet转发到服务器上的另一个资源(Servlet, JSP文件或HTML文件)。
  2. public void include(ServletRequest request, ServletResponse response)抛出ServletException, java.io.IOException:在响应中包含资源的内容(Servlet, JSP页面或HTML文件)。
RequestDispatcher接口的forward()方法

如上图所示, 第二个servlet的响应被发送到客户端。第一个Servlet的响应不会显示给用户。


RequestDispatcher接口的include()方法
如上图所示, 第二个servlet的响应包含在发送到客户端的第一个servlet的响应中。

如何获取RequestDispatcher的对象

ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的对象。句法:

getRequestDispatcher方法的语法

public RequestDispatcher getRequestDispatcher(String resource);

使用getRequestDispatcher方法的示例

RequestDispatcher rd=request.getRequestDispatcher("servlet2");
//servlet2 is the url-pattern of the second servlet

rd.forward(request, response);//method may be include or forward

RequestDispatcher接口的示例

在此示例中, 我们正在验证用户输入的密码。如果密码是servlet, 它将转发请求到WelcomeServlet, 否则将显示错误消息:抱歉, 用户名或密码错误!。在此程序中, 我们正在寻找硬编码信息。但是你也可以将其检查到数据库中, 这将在开发章节中看到。在此示例中, 我们创建了以下文件:

  • index.html文件:用于从用户获取输入。
  • Login.java文件:用于处理响应的servlet类。如果提供密码, 它将把请求转发到欢迎servlet。
  • WelcomeServlet.java文件:用于显示欢迎消息的servlet类。
  • web.xml文件:一个部署描述符文件, 其中包含有关servlet的信息。
RequestDispatcher接口

index.html

<form action="servlet1" method="post">
Name:<input type="text" name="userName"/><br/>
Password:<input type="password" name="userPass"/><br/>
<input type="submit" value="login"/>
</form>

Login.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class Login extends HttpServlet {

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

	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
		
	String n=request.getParameter("userName");
	String p=request.getParameter("userPass");
		
	if(p.equals("servlet"){
		RequestDispatcher rd=request.getRequestDispatcher("servlet2");
		rd.forward(request, response);
	}
	else{
		out.print("Sorry UserName or Password Error!");
		RequestDispatcher rd=request.getRequestDispatcher("/index.html");
		rd.include(request, response);
					
		}
	}

}

WelcomeServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class WelcomeServlet extends HttpServlet {

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

	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
		
	String n=request.getParameter("userName");
	out.print("Welcome "+n);
	}

}

web.xml

<web-app>
 <servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>Login</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>WelcomeServlet</servlet-name>
    <servlet-class>WelcomeServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/servlet1</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>WelcomeServlet</servlet-name>
    <url-pattern>/servlet2</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
   <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>

下载此示例

下载此示例(在Myeclipse IDE中开发)

下载此示例(在Eclipse IDE中开发)

下载此示例(在netbeans IDE中开发)

RequestDispatcher接口程序
RequestDispatcher接口的示例
RequestDispatcher程序
RequestDispatcher的示例
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?