Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsp页面中的脚本元素_Jsp_El_Scopes - Fatal编程技术网

jsp页面中的脚本元素

jsp页面中的脚本元素,jsp,el,scopes,Jsp,El,Scopes,我不熟悉jsp。我正在jsp页面中编写一个“声明”和一个“脚本” 但是我在声明和“scriptlet”中创建的变量不存储在任何一个 范围。ie页面范围、请求范围、应用范围。为什么 下面是我的名为“success.jsp”的jsp文件 //未在任何作用域中创建x。 //y不是在任何作用域中创建的。 var p=“${x}”//这里,变量p没有得到任何值。 var q=“${y}”//在这里,变量不获取任何值。 为什么变量“x”和“y”不在任何一个作用域中创建。以及如何获取存储在“x”和“y”变量

我不熟悉jsp。我正在jsp页面中编写一个“声明”和一个“脚本”

但是我在声明和“scriptlet”中创建的变量不存储在任何一个

范围。ie页面范围、请求范围、应用范围。为什么

下面是我的名为“success.jsp”的jsp文件

//未在任何作用域中创建x。
//y不是在任何作用域中创建的。
var p=“${x}”//这里,变量p没有得到任何值。
var q=“${y}”//在这里,变量不获取任何值。

为什么变量“x”和“y”不在任何一个作用域中创建。以及如何获取存储在“x”和“y”变量中的值

我认为开始理解JSP的最好方法是,它们被秘密地解释成java类。但更具体地说:它们被放入一个函数中,在计算每一行之后,逐行写出html。因此,您可以使用标签。现在,正因为如此,标记实际上是经过计算但没有写入html的行。计算结果存储在生成的java方法的作用域中。所以最终发生的事情看起来像:

public void SendHtmlPage() {
  int x=20; 
  int y=30; 

  Print("<script>");

  Print("var p=\"${x}\"\;"); //This gets evaluated to getSession.getAttribute("x")
                             //Since there is no x in the session, it returns null
  Print("var q=\"${y}\"\;"); //Same here

  Print("</script>);
}
public void SendHtmlPage(){
int x=20;
int y=30;
打印(“”);
Print(“var p=\”${x}\“\;”;//这将计算为getSession.getAttribute(“x”)
//由于会话中没有x,因此它返回null
打印(“var q=\”${y}\“\;”;//此处相同
印刷品(“);
}
因此。这就是为什么在您的scriptlet中不知道x和y。但是,有一些方法可以将方法作用域变量保存到会话作用域。请检查以下内容:


祝你好运,编码愉快。:)

像这样更改代码

var p = <%=x%>;
var q = <%=y%>;
var p=;
var q=;

正如您所指出的,由jsp scriplet代码创建的变量在任何范围内都不可用,因为它们直接在编译的jps页面(内部编译为servlet类的任何jsp页面)中声明。
对于在jsp页面的其余部分中使用变量x,您有两个不同的选项:

  • 使用jsp scriplet表达式
    ,在这种情况下,javascipt片段中的代码是:

    var p=“”;
    var q=“”

  • 手动将变量x、y保存在pageContext范围内,这样它们就可以从EL:


  • 请注意,
    不同于

    ${x}用于EL而不是Scriptlet。Scriptlet使用
    var p = <%=x%>;
    var q = <%=y%>;