首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >会话和sessionScope在JSP中是一样的吗?

会话和sessionScope在JSP中是一样的吗?
EN

Stack Overflow用户
提问于 2013-07-11 18:07:53
回答 5查看 50K关注 0票数 21
public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    @Override
    public String execute() throws Exception {
        ActionContext ctx = ActionContext.getContext();
        Integer counter = (Integer)ctx.getApplication().get("counter");
        // put counter into application 
        ctx.getApplication().put("counter", counter);
        // put username into session
        ctx.getSession().put("user", username);
        if (getUsername().equals("crazyit.org")
                && getPassword().equals("leegang")) {
            ctx.put("tip", "Login Success! ");
            return SUCCESS;
        }
        else {
            ctx.put("tip", "Login Falied!");
            return ERROR;
        }        
    }
}

我将"counter"放在应用程序中,"user"放在session中,"tip"放在ActionContext中。在JSP中,我可以使用${session.user}${sessionScope.user}来引用"user“属性。${request.tip}${requestScope.tip}来引用tip

我的问题:

  1. 与EL中的sessionScoperequestScopeapplicationScope是相同的session、request、application?
  2. ActionContext和application的关系是什么?

附言:

我测试${request == requestScope}是正确的,这意味着它们是相同的?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-11 21:13:15

对于表达式语言(EL),作用域项是它们所引用的对象中的属性的值映射。例如,requestScope是request对象中值的映射表示。这在这个页面上有非常清晰的详细解释:Java Servlet and JSP。如果您通读了EL部分,您会注意到这里关于请求与请求范围的一点:The requestScope is NOT request object

我建议通读这一页,以便更好地理解servlet/jsp。

就ActionContext与这些项的关系而言,它实际上是struts用来封装servlet的包装器。你可以在这里阅读更多关于它的细节:Accessing application, session, request objects

这里给出了一些隐式值的引用,但我觉得仅仅说它是隐式的并不能真正解释太多。使用EL访问servlet变量时,可以显式声明要引用的作用域,例如:

 ${requestScope.myVariable}

您还可以通过省略作用域来隐式引用它:

 ${myVariable}

现在,这里可能出现的问题是,具有相同名称的变量可能会导致冲突。EL将按特定顺序检查隐含值: pageScope、requestScope、sessionScope和applicationScope、param、paramValues、header、headervalues、initParam、cookie、pageContext。这意味着,如果请求作用域中有一个变量与会话或应用程序作用域中的变量同名,则将引用请求作用域的值。

票数 28
EN

Stack Overflow用户

发布于 2013-07-11 19:51:45

缺省情况下,page, request, session and application scope对象可用于JSP页面。因此,您可以使用EL语法进行访问。

下表显示了EL可用的隐式对象。

       Implicit object            Description
1.     pageScope        Scoped variables from page scope
2.     requestScope     Scoped variables from request scope
3.     sessionScope     Scoped variables from session scope
4.     applicationScope Scoped variables from application scope
5.     param            Request parameters as strings
6.     paramValues      Request parameters as collections of strings
7.     header           HTTP request headers as strings
8.     headerValues     HTTP request headers as collections of strings
9.     initParam        Context-initialization parameters
10.    cookie           Cookie values
11.    pageContext      The JSP PageContext object for the current page

因此session和sessionScope是相同的,但在上下文上不同,它们是used.More,具体地说是session is objectsessionScope is map (key, value) of Attribute and its value

  • 如果您说${session.sessionAttr},它指的是可用于JSP页的会话对象。
  • 如果您说${sessionScope.sessionAttr},它指的是EL.
  • 可用的隐式会话对象,或者,如果您只说${attrName},它将在从页到应用程序范围的所有范围内搜索attrName。<代码>H213<代码>F214
票数 24
EN

Stack Overflow用户

发布于 2013-07-11 18:12:06

  1. 会话、请求和应用程序实际上是HttpSessionHttpServletRequestServletContext对象,而sessionScope, requestScope and applicationScope提供对所有会话、请求和应用程序范围属性的访问。

你可以说applicationScope > sessionScope > requestScope。

所有会话、web应用程序中的所有请求都可以访问

  • applicationScope属性。只要应用程序是alive
  • sessionScope属性,这些属性就会一直有效。当前HttpSession中的所有请求都可以访问这些属性。只要会话是alive
  • requestScope属性,这些属性就保持活动状态。只能从当前请求访问这些属性。一旦响应完成,它们就会消失。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17590620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档