session和sessionScope在JSP EL中是否相同? - 代码日志

session和sessionScope在JSP EL中是否相同?

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”,在ActionContext中显示“tip”。在JSP中,我可以使用$ {session.user}和$ {sessionScope.user}引用“user”属性。 $ {request.tip}和$ {requestScope.tip}参考提示。

我的问题:

>会话,请求,应用程序与sessionScope,requestScope,applicationScope在EL中相同?
> ActionContext和request(requestScope)之间有什么关系?

P.S:

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

使用表达式语言(EL),范围项是它们引用的对象中属性的值映射。例如,requestScope是请求对象中的值的映射表示。这在这个页面非常清楚的细节解释:Java Servlet and JSP.如果你阅读EL部分,你会注意到有关请求vs请求范围在这里: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。这意味着如果您在请求范围中具有与会话或应用程序范围中的变量具有相同名称的变量,则将引用请求作用域值。

http://stackoverflow.com/questions/17590620/are-session-and-sessionscope-the-same-in-jsp-el

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:session和sessionScope在JSP EL中是否相同?