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
。
我的问题:
sessionScope
、requestScope
、applicationScope
是相同的session、request、application?ActionContext
和application的关系是什么?附言:
我测试${request == requestScope}
是正确的,这意味着它们是相同的?
发布于 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。这意味着,如果请求作用域中有一个变量与会话或应用程序作用域中的变量同名,则将引用请求作用域的值。
发布于 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 object
和sessionScope is map (key, value) of Attribute and its value
。
${session.sessionAttr}
,它指的是可用于JSP页的会话对象。${sessionScope.sessionAttr}
,它指的是EL.${attrName}
,它将在从页到应用程序范围的所有范围内搜索attrName。<代码>H213<代码>F214发布于 2013-07-11 18:12:06
HttpSession
、HttpServletRequest
和ServletContext
对象,而sessionScope, requestScope and applicationScope
提供对所有会话、请求和应用程序范围属性的访问。你可以说applicationScope > sessionScope > requestScope。
所有会话、web应用程序中的所有请求都可以访问
https://stackoverflow.com/questions/17590620
复制相似问题