zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    'Specifying a namespace in include() without providing an app_name ' django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing
    ERRORS: <class 'myApp.admin.GradesAdmin'>: (admin.E108) The value of 'list_display[3]'
    TypeError: __init__() missing 1 required positional argument: 'on_delete'
    mysqlclient 1.3.13 or newer is required; you have 0.9.3.
    第一个Tornado程序
    Tornado安装
    MySQL下载与安装
    pycharm安装PyQt框架
    pycharm不能安装第三方库,错误代码Non-zero exit code (1) 的解决办法
    Python相关
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7863579.html
Copyright © 2011-2022 走看看