gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:11:33 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com