首页 > 代码库 > Java Web中请求转发和请求包含
Java Web中请求转发和请求包含
1、都是在一个请求中跨越多个Servlet
2、多个Servlet在一个请求中,他们共享request对象。就是在AServle中setAttribute()保存数据在BServlet中由getAttribute()取出数据
3、在AServlet转发到BServlet,那么整个请求都是由BServlet来完成,AServlet不再插手
4、AServlet 包含BServlet,那么两个Servlet共同完成请求
5、请求转发和请求包含都需要使用一个对象RequestDispatcher。
AServlet.java
package cn.edu.aynu.rjxy.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AServlet extends HttpServlet { /* * 请求转发 * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应头 response.setContentType("text/html;charset=utf-8"); response.getWriter().print("AServlet..."); request.setAttribute("name", "张三"); //获得RequestDispatcher对象 RequestDispatcher rd = request.getRequestDispatcher("/BServlet"); //将request对象和response对象传递给BServlet rd.forward(request, response); }}
BServlet.java
package cn.edu.aynu.rjxy.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 BServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = (String) request.getAttribute("name"); response.getWriter().print("BServlet为您服务..."); response.getWriter().print("name="+name); }}
CServlet.java
package cn.edu.aynu.rjxy.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CServlet extends HttpServlet { /* * 请求包含 * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应头 response.setContentType("text/html;charset=utf-8"); response.getWriter().print("AServlet为您服务..."); RequestDispatcher rd = request.getRequestDispatcher("/DServlet"); rd.include(request, response); }}
DSevler.java
package cn.edu.aynu.rjxy.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 DServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().print("DServlet为您服务..."); }}
1、请求转发是一个请求,而重定向是两个请求
2、请求转发后浏览器地址栏不会发生变化重定向会发生变化
3、请求转发的目标只能在本项目中的资源,重定向的目标可以是其他应用
4、请求转发对Aservlet和Bservlet的请求方法是相同的,就是要么都是get,要么都是post。因为他们是同一个请求
5、请求转发可以在多个Servlet中共享request的数据,而重定向不行。
Java Web中请求转发和请求包含
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。