zoukankan      html  css  js  c++  java
  • servlet之间传递数据的方式

    Servlet传递数据方式

    基本概述

        Servlet传递数据的方式有很多,这里提供五种方式:

    1、静态变量

    2、HttpServletResponse的sendRedirect()方法

    3、HttpServletRequest的getRequestDispatch()方法

    4、HttpServletRequest的getSession()方法

    5、HttpServletRequest的setAttribute()方法

    静态变量

        通过建立一个数据类来进行传递。

    案例:

    public class MyData{

        public static String data; //通过使用该类来实现数据传递

    }

    HttpServletResponse的sendRedirect()方法

        sendRedirect()方法是让浏览器重定向到另一个链接。其内部原理是设置状态码为303,并设置相应的Location响应头。

    基本语法:

    response.sendRedirect("/Web应用名/资源名?uname="+username+"&pwd="+password);

    response.sendRedirect(“servlet的地址?参数名=参数值&参数名=参数值...”);

    参照值是String , 参数名应当使用 字母组合

    在接受数据的Servlet中:

    String 参数=request.getParameter(“参数名”);

    基本原理图

    PS:使用重定向不能使用PrintWrite,ServletOutputStream这样的流。因为重定向已经将消息返回给浏览器,其数据流也就没必要使用了。

    HttpServletRequest的getRequestDispatch()方法

        getRequestDispatch()方法是使WEB服务器从当前Servlet转发到当前应用下的另一个Servlet。

    基本语法:

    request.getRequestDispatcher(资源地址).forward(request,response);

    资源地址:不需要项目名。因为它只能在WEB服务器内部转发。

    基本原理图

    PS:getRequestDispatcher()请求转发可以一直转发下去,只要最终会处理并给服务器相应内容就行了。而且请求转发不会改变浏览器的URL,sendRedirect()会改变URL。

    注意事项:

    1、使用forward不能转发到该WEB应用外的URL

    2、因为forward发生在文本服务器内,所以Servlet1、Servlet2等等,只要一直转发,使用的都是相同的request和response

    HttpServletRequest的getSession()方法

        getSession()方法会获取一个会话,这个内容会在另一篇博客会话技术中详细说明。

    基本语法:

    1、放入session:request.getSession.setAttribute("loginUser",username); 

    2、取出session:request.getSession.getAttribute("loginUser");

    PS:该方法可以传递对象

    案例:

    放入:

    User user= new User();

    user.setName(“zs”);

    user.setPassWord(“123”);

    request.getSession.setAttribute("userObj",userObj); 

    取出:

    User user=(User)request.getSession.getAttribute(“userObj”);

    HttpServletRequest的setAttribute()方法

        setAttribute()方法可以设置一个键值对,该键值对在该request的有效期内都可以使用。相应的还有removeAttribute()注销键值对的方法。该方法经常和getRequestDispatch()一起使用。

    基本语法:

    setAttribute(name, value);

    PS:request的Attribute在一次请求中有效。一次请求:没有将响应消息返回给浏览器就视为一次请求。

    比较sendRedirect()和forward(request,response)

    1、sendRedirect()重定向,forward()转发

    2、实际发生的位置不一样

        sendRedirect 发生在浏览器

        forward 发生在web服务器

    3、使用用法不一样

    request.getRequestDispatcher(“/资源URI”).forward(request,response)

    response.sendRedirect(“/web应用/资源URI”);

    4、能够去URL范围不一样

    sendRedirect可以去任意URL

    forward 只能去当前的WEB应用的资源

    ----------参考《韩顺平.细说Servlet》

     抄袭于http://blog.csdn.net/q547550831/article/details/50446453

  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/torchstar/p/torchstar.html
Copyright © 2011-2022 走看看