zoukankan      html  css  js  c++  java
  • 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的数据,而重定向不行。

  • 相关阅读:
    PAT A1023 Have Fun with Numbers (20) [⼤整数运算 高精度]
    算法笔记-数学问题-高精-大整数
    PAT A1130 Infix Expression (25) [中序遍历]
    PAT A1130 Infix Expression (25分) [二叉树中序遍历 中缀表达式]
    PAT A1129 Recommendation System (25) [set的应⽤,运算符重载]
    PAT A1118 Birds in Forest (25) [并查集]
    PAT A1124 Raffle for Weibo Followers (20分) [map vector]
    C++ STL
    PAT A1121 Damn Single (25) [map set hash]
    算法笔记-易错记录
  • 原文地址:https://www.cnblogs.com/kangyaping/p/5911652.html
Copyright © 2011-2022 走看看