jsp - JSP EL 中的 session 和 sessionScope 相同吗?

标签 jsp el session-scope

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”放在 session 中的应用程序“user”中,并将“tip”放在ActionContext中。在 JSP 中,我可以使用 ${session.user}${sessionScope.user} 来引用“user”属性。 ${request.tip}${requestScope.tip} 引用 tip

我的问题:

  1. session、request、application 与 EL 中的 sessionScoperequestScopeapplicationScope 相同吗?
  2. ActionContextrequest(requestScope) 之间有什么关系?

附注:

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

最佳答案

使用表达式语言 (EL),范围项是它们引用的对象中的属性的值映射。例如,requestScope 是请求对象中值的映射表示。此页面对此进行了非常清晰的详细解释: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。这意味着,如果请求范围中的变量与 session 或应用程序范围中的变量同名,则将引用请求范围的值。

关于jsp - JSP EL 中的 session 和 sessionScope 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17590620/

相关文章:

JSF vs CDI Session Scoped 对无状态 EJB 事务有奇怪的影响。谁能解释一下?

java - CaptainCasa 框架 : TOUCHSIGNATURE component output as image/png data

java - 什么是 taglib uri 搜索序列?

java - 为什么 '1' > 2 是错误的?

jsf - 使用 EL 将 java.util.Date 值转换为字符串

java - ScopedProxy 如何决定使用什么 Session?

java - 我可以从应用程序范围的 bean 访问 Spring session 范围的 bean 吗?如何?

java - 在 Controller 、spring 内部的 @postconstruct 方法中实例化 @autowired bean

java - JSP getVariableResolver() 已弃用,JSP 2.2 中的正确方法是什么?

jsp - <c :if test= > is always true