Servlet------RequestDispatcher请求转发
2014-08-27 16:32
471 查看
一、RequestDispatcher对象由Servlet容器创建,用于封装一个由路径所标识的服务器资源,利用RequestDispatcher对象可以将请求转发给其他的Servlet或JSP页面,
RequestDispatcher是一个接口,得到RequestDispatcher对象有以下三种方法
RequestDispatcher rd = context.getNamedDispatcher("login");
-----利用ServletContext context对象,参数login是Servlet或JSP页面的名字。
RequestDispatcher rd = context.getRequestDispatcher("/login");
-----利用ServletContext context对象,参数"/login"是在xml中定义的Servlet路径,此方法的参数必须以"/"开始,被解释为相对于当前上下文根(context root)路径
RequestDispatcher rd = req.getRequestDispatcher("/login");
-----利用ServletRequest req对象,返回一个RequestDispatcher对象,此方法的参数不但可以是相对上下文的根路径,如果路径没有以斜杠(/)开始,则被解释为相对于当前Servlet的路径
二、RequestDispatcher接口中定义了两种方法用于将请求转发
public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
-----原Servlet调用此方法后将请求转发给服务器上的另一个Servlet、JSP或HTML文件,且原Servlet此方法之前的代码将自动清除,此方法之后的代码也不再执行,将控制权交
由另一个Servlet
public void include(ServletRequest request,ServletResponse response) throws ServletException, java.io.IOException
-----原Servlet调用此方法后将请求转发给服务器上的另一个Servlet、JSP或HTML文件,且另一个Servlet执行完之后将控制权将由原Servlet继续执行
三、请求转发的实例
public class PortalServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
res.setContentType("text/html;charset=gb2312");
PrintWriter out = res.getWriter();
out.println("<html><head>");
out.println("<title>登录页面</title>");
out.println("</head><body>");
String name = req.getParameter("username");
String pwd = req.getParameter("password");
if("ye".equals(name) && "123".equals(pwd)){
ServletContext context = getServletContext();
RequestDispatcher rd = context .getRequestDispatcher("/welcome");
rd.forward(req, res);
//6-8行输出的HTML代码将被自动清除,23-24行代码也不执行,Servlet容器将控制权交给welcome这个Servlet
}
else{
RequestDispatcher rd = req.getRequestDispatcher("login2");
rd.include(req, res);
//login2这个Servlet执行完后再从这里接着往下执行
}
out.println("</body></html>");
out.close();
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
doGet(req, res);
}
四、sendRedirect()和forward()方法的区别
-----HttpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forward()方法都可以利用另外的资源(Servlet、JSP页面或HTML文件)来为客户端服务,但两种方法有本质的区别
1、sendRedirect()方法
---->浏览器访问Servlet1
---->Servlet1调用sendRedirect()重定向到Servlet2
---->浏览器访问Servlet2
---->Servlet2对客户端的请求做出响应
2、forward()方法
---->浏览器访问Servlet1
---->Servlet1调用forward()方法转发给Servlet2
---->Servlet2对请求做出响应
RequestDispatcher是一个接口,得到RequestDispatcher对象有以下三种方法
RequestDispatcher rd = context.getNamedDispatcher("login");
-----利用ServletContext context对象,参数login是Servlet或JSP页面的名字。
RequestDispatcher rd = context.getRequestDispatcher("/login");
-----利用ServletContext context对象,参数"/login"是在xml中定义的Servlet路径,此方法的参数必须以"/"开始,被解释为相对于当前上下文根(context root)路径
RequestDispatcher rd = req.getRequestDispatcher("/login");
-----利用ServletRequest req对象,返回一个RequestDispatcher对象,此方法的参数不但可以是相对上下文的根路径,如果路径没有以斜杠(/)开始,则被解释为相对于当前Servlet的路径
二、RequestDispatcher接口中定义了两种方法用于将请求转发
public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
-----原Servlet调用此方法后将请求转发给服务器上的另一个Servlet、JSP或HTML文件,且原Servlet此方法之前的代码将自动清除,此方法之后的代码也不再执行,将控制权交
由另一个Servlet
public void include(ServletRequest request,ServletResponse response) throws ServletException, java.io.IOException
-----原Servlet调用此方法后将请求转发给服务器上的另一个Servlet、JSP或HTML文件,且另一个Servlet执行完之后将控制权将由原Servlet继续执行
三、请求转发的实例
public class PortalServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
res.setContentType("text/html;charset=gb2312");
PrintWriter out = res.getWriter();
out.println("<html><head>");
out.println("<title>登录页面</title>");
out.println("</head><body>");
String name = req.getParameter("username");
String pwd = req.getParameter("password");
if("ye".equals(name) && "123".equals(pwd)){
ServletContext context = getServletContext();
RequestDispatcher rd = context .getRequestDispatcher("/welcome");
rd.forward(req, res);
//6-8行输出的HTML代码将被自动清除,23-24行代码也不执行,Servlet容器将控制权交给welcome这个Servlet
}
else{
RequestDispatcher rd = req.getRequestDispatcher("login2");
rd.include(req, res);
//login2这个Servlet执行完后再从这里接着往下执行
}
out.println("</body></html>");
out.close();
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
doGet(req, res);
}
四、sendRedirect()和forward()方法的区别
-----HttpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forward()方法都可以利用另外的资源(Servlet、JSP页面或HTML文件)来为客户端服务,但两种方法有本质的区别
1、sendRedirect()方法
---->浏览器访问Servlet1
---->Servlet1调用sendRedirect()重定向到Servlet2
---->浏览器访问Servlet2
---->Servlet2对客户端的请求做出响应
2、forward()方法
---->浏览器访问Servlet1
---->Servlet1调用forward()方法转发给Servlet2
---->Servlet2对请求做出响应
相关文章推荐
- Servlet请求转发之RequestDispatcher
- Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)
- Servlet请求转发:RequestDispatcher接口
- Servlet ---- RequestDispatcher请求转发
- java学习之Servlet请求转发之RequestDispatcher
- Servlet 使用getRequestDispatcher进行请求转发页面未跳转 后台也未报错的问题的解决方法
- HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较
- Servlet请求转发之RequestDispatcher
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- Servlet请求转发 RequestDispatcher接口( 转载)
- Servlet请求转发 RequestDispatcher接口知识点
- Servlet请求转发 RequestDispatcher与sendRedirect -
- Servlet请求转发 RequestDispatcher与sendRedirect
- javaweb-day06-4&5&6 (Servlet-Request-方法、表单获取客户端中文信息、URL编码、Request容器和请求转发、RequestDispatcher.include()
- Servlet请求转发 RequestDispatcher接口
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- 使用request.getRequestDispatcher请求转发到一个页面中文乱码解决
- Servlet学习笔记—request的请求转发(服务器跳转)
- 【Head First Servlets and JSP】笔记10:请求分派(RequestDispatcher)
- request.sendRedirect(重定向)和request.getRequestDispatcher(请求转发)