• 请求转发


    实现不同servlet之间的数据传递,这样便可实现业务逻辑和显示逻辑的分离

    实例:

    (1) 第一个servlet,负责业务

    
    package com.kettas.servlet ;
    
    import javax.servlet.* ;
    
    import javax.servlet.http.*;
    
    import java.io.*; 
    
    import java.util.* ;
    
    public class ForwardA extends HttpServlet{
    
        @Override
    
        public void service( HttpServletRequest request , HttpServletResponse response )
    
            throws ServletException , IOException
    
        {       System.out.println( "=== This is forward A ===" ) ;
    
               // 将业务部分的数据存储在request对象中,传递给下一个servlet使用
    
               Date d = new Date();
    
               request.setAttribute( "date" , d ) ;
    
               /* 注意转发的过程
    
                * 首先获得一个知道下一棒地址的"接力棒"对象,然后将这个"接力棒"传给下一个
    
                * servlet,这样便将请求转发了。
    
                */
    
               RequestDispatcher disp = request.getRequestDispatcher( "/forwardB" ) ;
    
               disp.forward( request , response ) ;
    
        }
    
    }
    

    注意:

    1,这种请求转发的方式是共用一个连接的,不管你中途经过了多少个servlet,正因如此,这些servlet才能共享request中存储的数据。

    2,只有最后一个servlet,才能在客户端浏览器中显示。

    (2) 第二个servlet,负责显示

    
    package com.kettas.servlet ;
    
    import javax.servlet.* ;
    
    import javax.servlet.http.*;
    
    import java.io.*; 
    
    import java.util.* ;
    
    public class ForwardB extends HttpServlet{
    
        @Override
    
        public void service( HttpServletRequest request , HttpServletResponse response )
    
            throws ServletException , IOException
    
        {       response.setContentType( "text/html" ); 
    
               PrintWriter out = response.getWriter();
    
               out.println( "<h2>This is forwared B</h2>" ) ;
    
               // 通过getAttribute方法,从request中取得数据
    
               // 由于此方法返回的是Object对象,故要强转
    
               Date d = (Date)request.getAttribute( "date" ) ;
    
               out.println( "<h2>" + d + "</h2>" ) ;
    
               System.out.println( "=== This is forward B ===" ) ;
    
               out.flush();
    
        }
    
    }
    

    (3) web.xml片段:

    
    <servlet> 
    
        <servlet-name>a</servlet-name>
    
        <servlet-class>com.kettas.servlet.ForwardA</servlet-class>
    
    </servlet>                                  
    
    <servlet-mapping> 
    
        <servlet-name>a</servlet-name>  
    
        <url-pattern>/forwardA</url-pattern>
    
    </servlet-mapping>
    
    <servlet> 
    
        <servlet-name>b</servlet-name>
    
        <servlet-class>com.kettas.servlet.ForwardB</servlet-class>
    
    </servlet>                                  
    
    <servlet-mapping> 
    
        <servlet-name>b</servlet-name>  
    
        <url-pattern>/forwardB</url-pattern>
    
    </servlet-mapping>
    

    页面跳转的两种方式:

    1)request.getRequestDispatcher(“/forwardA”).forward(request , response); 这种跳转是在服务器内部是servlet之间跳转,显示的总是最后一个servlet A-?B--?----?D

    2)response.sendRedirect(“mayservlet/query”)它其实是在客户端的url发生改变,相当一次新的请求,故不能传递数据,但能在不同的应用中跳转

  • 相关阅读:
    Boost练习程序(multi_index_container)
    mathematica练习程序(图像取反)
    【转】媒体播放器三大底层架构
    CentOS安装中文支持
    Retrofit2文件上传下载及其进度显示
    Andorid面试问题整理
    5分钟实现Android中更换头像功能
    Android中突发情况Activity数据的保存和恢复
    5分钟让你学会用最高效的工具解析所有Json
    android http 和https请求
  • 原文地址:https://www.cnblogs.com/yuyu666/p/9743890.html
Copyright © 2020-2023  润新知