继续来学习ServletContext对象的方法,这个接口中还有一个方法叫 getRequestDispatcher(java.lang.String path),这个对象下有转发的功能。下面用代码来演示下转发功能,我一个项目中有两个Servlet子类,ServletDemo1配置映射是/demo1, 而ServletDemo2配置的映射是/demo2, 转发的意思就是,浏览器访问/demo1,实际上后台执行是/demo2中的service方法。
1.RequestDispatcher对象介绍
在J2EE API文档搜索找到RequestDispatcher,这是一个接口,定义了一个从客户端SERVLET接收请求的对象,并将其传送给服务器上的任一资源,这个对象具有转发请求功能。这个接口下有一个方法forward(), 这个作用就是在服务器上把一个servlet的请求转到另外一个server映射的资源上。
2.两个Servlet对象代码
ServletDemo1.java 代码内容
package com.anthony.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用GenericServlet类中的getServletContext()方法得到ServletContext对象
this.getServletContext().getRequestDispatcher("/demo2").forward(request, response);
System.out.println("转发结束");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ServletDemo2.java 代码内容
package com.anthony.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ServletDemo2");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
web.xml我就不贴代码了,和前面一样需要配置没一个servlet映射。
3.部署,执行测试
浏览器打开 http://localhost:8080/Servlet01/demo1
ServletDemo2
转发结束
上面输出效果是在ServletDemo2中doGet方法中的代码,浏览器请求的是ServletDemo1映射的/demo1,这个就是转发的功能。