• Servlet传递数据方式


    Servlet传递数据方式

    基本概述

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

    1、静态变量

    2、HttpServletResponsesendRedirect()方法

    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传递数据方式 - CSDN博客
    http://blog.csdn.net/q547550831/article/details/50446453

  • 相关阅读:
    题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问M个月时兔子的数量,M为键盘读入的正整数。(请用java语言作答)
    无聊游戏随笔--学院篇
    Java数组冒泡,选择,插入三种常用排序法及自带的快速排序法
    js写年月日三级下拉列表框
    查询避免Unknown column ‘xxx’ in ‘where clause’
    MyEclipse运行web程序报错,先检查这几点!
    Servlet开发之中线程安全问题
    取消Eclipse等号、分号、空格代码自动补全
    try/catch、finally语句的执行顺序测试
    02-MySQL双机热备的搭建
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7863579.html
Copyright © 2020-2023  润新知