zoukankan      html  css  js  c++  java
  • Jsp四种变量作用范围

    转自:Ronbay的新浪博客
    JSP中变量的范围分为四种:page,request,session和application
    这四个范围依序从前到后,范围越来越大

    一、page范围
    在page范围内定义的变量,只能在同一个页面内部访问。在JSP页面中,演示如下代码:

    <%
    pageContext.setAttribute("name","Johnson");
    out.println(pageContext.getAttribute("name"));
    %>
    

    上面的代码中,在page范围内,定义了一个名称为name的属性,其值为Johnson,
    第二行代码将该属性的值打印出来。注意:这样定义的这个name属性,在这个页面之外
    的部分是访问不到的。考虑到page范围只是在一个页面中共享数据,其范围是非常小的。
    需要注意的是,在page范围,以及其他三种范围中,存储的值都只能是引用类型的值。
    下面的例子演示怎么将一个整数存入page范围之内。

    <%
    pageContext.setAttribute("amount",new Integer(100));
    out.println(pageContext.getAttribute("amount"));
    %>

    二、request范围
    在Java的WEB应用程序中,可以将一个变量值存入request范围中,然后可以将request
    对象传递给下一个页面,那么下一个页面中,可以获得从上一个页面传送过来的request
    对象中保存的属性值。
    这里,我们修改上一章中的登陆案例,来演示request范围属性的使用。
    我们希望用户登录成果以后,能够在登陆成功页面,即welcome.jsp页面中,显示
    该登陆用户的用户名,那么可以修改前面登陆案例中的验证登陆用户的servlet如下:

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
    ServletException, IOException {
    String name=request.getParameter("name");
    String pwd=request.getParameter("pwd");
    User user=new User();
    user.setName(name);
    user.setPwd(pwd);
    String dbName=request.getRealPath("goods.mdb");
    //转向器
    String url="";
    try {
    db d1 = new db(dbName);
    if(d1.isUserValid(user))
    {
    request.setAttribute("name",name);
    url="welcome.jsp";
    }
    else
    {
    url="failed.jsp";
    }
    RequestDispatcher rd=request.getRequestDispatcher(url);
    //把用户名存入request scope中
    //设置属性
    rd.forward(request,response);
    }
    catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    

    在上面的代码中,用户登陆成功以后,把用户名存入request范围,
    request.setAttribute(“name”,name);
    然后获取将要转向的页面的转向器,

    url=”welcome.jsp”;
    RequestDispatcher rd=request.getRequestDispatcher(request,response);

    这样,本servlet中的request对象就会被传递到下一个页面,在下一个页面,
    即welcome.jsp中,就可以通过

    request.getAttribute(“name”);

    的方式获取到name属性,即登陆用户的用户名。

    三、session范围
    当用户通过浏览器和服务器连通以后,服务器为该用户在服务器上分配一个供该用户专
    用的内存空间,这个内存空间中保存着用户访问该网站服务器期间的一些信息,这些信
    息称为会话信息,也就是Session信息。服务器为每个访问该服务器的连接分配一个唯
    一的编号,该编号用以唯一确认该用户。这个编号就是我们通常说的SessionID。
    有了这个会话信息空间以后,用户就可以把和本次访问相关的一些信息保存在这个会话
    信息空间中。会话信息空间中保存的信息只和本次连接有关。
    需要注意的是,通过同一台主机打开多个浏览器访问服务器的时候,每一个浏览器连
    接对应一个会话。要设置一个session范围的变量,可以使用下面的方法。

    <%
    session.setAttribute("name",”Johnson”);
    out.println(session.getAttribute("name"));
    %>
    

    四、application范围
    一台WEB服务器启动以后,在服务器上有一个由所有连接共享的内存空间,
    这就是application范围空间。在application范围中定义的变量,可以由所有连接共享。
    一个连接对application范围中变量的修改,会体现到另外一个连接中。
    要设置一个application范围的变量,可以使用如下方法:

    <%
    application.setAttribute("name",”Johnson”);
    out.println(application.getAttribute("name"));
    %>
  • 相关阅读:
    es6箭头函数 this 指向问题
    vue脚手架搭建移动端项目--flexible.js
    vue通过自定义指令 v-py 将名字转拼音
    ES6相关
    闭包
    apply和call与this
    RPC
    Linux根目录下各目录文件类型及各项缩写全称
    网站分析相关
    [转]作为首席架构师,我是如何选择并落地架构方案的?
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286851.html
Copyright © 2011-2022 走看看