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

  • 相关阅读:
    使用VMware 15 安装虚拟机和使用CentOS 8
    .Net工具类--表达式目录树解析DataReader和DataTable
    .Net 获取当前周是第几周
    使用Net Mail发送邮件
    ASP.NET Core 中的 Razor 文件编译
    Sql去重一些技巧
    手动实现一个简单的IOC容器
    Portswigger-web-security-academy:OAth authentication vulnerable
    Portswigger-web-security-academy:ssrf
    Portswigger-web-security-academy:os command injection
  • 原文地址:https://www.cnblogs.com/torchstar/p/torchstar.html
Copyright © 2011-2022 走看看