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的数据,而重定向不行。

  • 相关阅读:
    归并两路有序链表
    [转]两种高性能I/O设计模式(Reactor/Proactor)的比较
    linux 静态库使用经验
    系统性能调优经验
    编译-O 选项对性能提升作用
    [转]Linux shell中的那些小把戏
    shell函数传递带空格的参数
    标题清洗引发的算法(两个字符串的最长公共子串)
    正则表达式之Matcher类中group方法
    ConcurrentHashMap JDK 1.6 源码分析
  • 原文地址:https://www.cnblogs.com/kangyaping/p/5911652.html
Copyright © 2011-2022 走看看