JSP 语法

  • 语法

    在本章中,我们将讨论JSP中的语法。我们将了解JSP开发中涉及的简单语法(即元素)的基本用法。
  • JSP的元素

    脚本
    脚本可以包含任意数量的JAVA语言语句,变量或方法声明或在页面脚本语言中有效的表达式。以下是Scriptlet的语法-
    
    <% code fragment %>
    
    您可以编写与上述语法等效的XML,如下所示:
    
    <jsp:scriptlet>
       code fragment
    </jsp:scriptlet>
    
    您编写的任何文本,HTML标记或JSP元素都必须在scriptlet之外。以下是JSP的简单第一个示例-
    
    <html>
       <head><title>Hello World</title></head>
       
       <body>
          Hello World!<br/>
          <%
             out.println("Your IP address is " + request.getRemoteAddr());
          %>
       </body>
    </html>
    
    尝试一下
    注意 -假设Apache Tomcat安装在C:\apache-tomcat-9.0.34中,并且您的环境已根据环境设置教程进行了设置。让我们将以上代码保存在JSP文件hello.jsp中,然后将此文件放在C:\apache-tomcat9.0.34\webapps\ROOT目录中。使用URL http://localhost:8080/hello.jsp浏览相同的内容。上面的代码将产生以下结果-
    hello World
    JSP声明
    声明声明了一个或多个变量或方法,您可以稍后在JSP文件中的Java代码中使用它们。在JSP文件中使用变量或方法之前,必须先声明该变量或方法。
    以下是JSP声明的语法-
    
    <%! declaration; [ declaration; ]+ ... %>
    
    您可以编写与上述语法等效的XML,如下所示:
    
    <jsp:declaration>
       code fragment
    </jsp:declaration>
    
    以下是JSP声明的示例-
    
    <%! int i = 0; %> 
    <%! int a, b, c; %> 
    <%! Circle a = new Circle(2.0); %> 
    
    JSP表达式
    JSP表达式元素包含一种脚本语言表达式,脚本语言表达式经过计算,转换为字符串,然后插入该表达式出现在JSP文件中的位置。由于表达式的值已转换为字符串,因此可以在JSP文件中的一行文本中使用表达式,无论是否用HTML标记。表达式元素可以包含根据Java语言规范有效的任何表达式,但是您不能使用分号来结束表达式。以下是JSP 表达式的语法-
    
    <%= expression %>
    
    您可以编写与上述语法等效的XML,如下所示:
    
    <jsp:expression>
       expression
    </jsp:expression>
    
    以下示例显示了JSP表达式-
    
    <html> 
       <head><title>A Comment Test</title></head> 
       
       <body>
          <p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
       </body> 
    </html> 
    
    尝试一下
    上面的代码将产生以下结果-
    
    Today's date: 2020-7-1 17:13:23
    
    JSP注释
    JSP注释标记了JSP容器应忽略的文本或语句。当您想隐藏或“注释掉” JSP页面的一部分时,JSP注释非常有用。以下是JSP注释的语法-
    
    <%-- This is JSP comment --%>
    
    以下示例显示了JSP注释-
    
    <html> 
       <head><title>A Comment Test</title></head> 
       
       <body> 
          <h2>A Test of Comments</h2> 
          <%-- 此注释将在页面源中不可见 --%> 
       </body> 
    </html> 
    
    尝试一下
    上面的代码将产生以下结果-
    
    A Test of Comments
    
    您可以在各种情况下使用少量特殊结构来插入注释或字符,否则这些注释或字符将被特殊对待。这是一个摘要-
    语法 目的
    <%-- comment --%> JSP注释。 被JSP引擎忽略。
    <!-- comment --> HTML注释。 被浏览器忽略。
    <\% 表示静态<%文字。
    %\> 表示静态%>文字。
    \' 使用单引号的属性中的单引号。
    \" 使用双引号的属性中的双引号。
    JSP指令
    JSP指令影响Servlet类的整体结构。它通常具有以下形式-
    
    <%@ directive attribute="value" %>
    
    指令标记有三种类型-
    指令 说明
    <%@ page ... %> 定义与页面相关的属性,例如脚本语言,错误页面和缓冲要求。
    <%@ include ... %> 在翻译阶段包含文件。
    <%@ taglib ... %> 声明页面中使用的包含自定义操作的标记库
    在以后的章节我们还会单独的讲解JSP指令。
    JSP动作
    JSP操作使用结构的XML语法来控制Servlet引擎的行为。您可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面或为Java插件生成HTML。Action元素只有一种语法,因为它符合XML标准-
    
    <jsp:action_name attribute="value" />
    
    动作元素基本上是预定义的功能。下表列出了可用的JSP动作-
    语法 目的
    jsp:include 在请求页面时包含一个文件。
    jsp:useBean 查找或实例化JavaBean。
    jsp:setProperty 设置JavaBean的属性。
    jsp:getProperty 将JavaBean的属性插入输出。
    jsp:forward 将请求者转发到新页面。
    jsp:plugin 生成特定于浏览器的代码,为Java插件创建OBJECT或EMBED标签。
    jsp:element 动态定义XML元素。
    jsp:attribute 定义动态定义的XML元素的属性。
    jsp:body 定义动态定义的XML元素的主体。
    jsp:text 用于在JSP页面和文档中编写模板文本。
    在以后的章节我们还会单独的讲解JSP动作。
    JSP隐式对象
    JSP支持九个自动定义的变量,这些变量也称为隐式对象。这些变量是-
    对象 描述
    request 这是与请求关联的HttpServletRequest对象。
    response 这是与对客户端的响应相关联的HttpServletResponse对象。
    out 这是用于将输出发送到客户端的PrintWriter对象。
    session 这是与请求关联的HttpSession对象。
    application 这是与应用程序上下文关联的ServletContext对象。
    config 这是与页面关联的ServletConfig对象。
    pageContext 这封装了服务器特定功能的使用,例如更高性能的JspWriters。
    page 这只是它的同义词,用于调用已翻译的Servlet类定义的方法。
    Exception Exception对象允许指定的JSP访问异常数据。
    在以后的章节我们还会单独的讲解JSP隐式对象。
    控制流语句
    您可以在JSP编程中使用所有API和Java构建块,包括决策语句,循环等。
    决策声明
    if ... else块开始时像一个普通的Scriptlet,但Scriptlet中在与包括scriptlet标记之间的HTML文本每行关闭。
    
    <%! int day = 3; %> 
    <html> 
       <head><title>IF...ELSE Example</title></head> 
       
       <body>
          <% if (day == 1 || day == 7) { %>
             <p> Today is weekend</p>
          <% } else { %>
             <p> Today is not weekend</p>
          <% } %>
       </body> 
    </html> 
    
    尝试一下
    上面的代码将产生以下结果-
    
    Today is not weekend
    
    现在看下面的switch ... case块,它已经使用out.println()和Scriptletas内部写了些不同-
    
    <%! int day = 3; %> 
    <html> 
       <head><title>SWITCH...CASE Example</title></head> 
       
       <body>
          <% 
             switch(day) {
                case 0:
                   out.println("It\'s Sunday.");
                   break;
                case 1:
                   out.println("It\'s Monday.");
                   break;
                case 2:
                   out.println("It\'s Tuesday.");
                   break;
                case 3:
                   out.println("It\'s Wednesday.");
                   break;
                case 4:
                   out.println("It\'s Thursday.");
                   break;
                case 5:
                   out.println("It\'s Friday.");
                   break;
                default:
                   out.println("It's Saturday.");
             }
          %>
       </body> 
    </html> 
    
    尝试一下
    上面的代码将产生以下结果-
    
    It's Wednesday.
    
    循环语句
    您还可以在Java中使用三种基本的循环块类型:JSP编程中的for,while和do…while块。 让我们看下面的循环示例-
    
    <%! int fontSize; %> 
    <html> 
       <head><title>FOR LOOP Example</title></head> 
       
       <body>
          <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
             <font color = "green" size = "<%= fontSize %>">
                JSP Tutorial
          </font><br />
          <%}%>
       </body> 
    </html> 
    
    尝试一下
    上面的示例可以使用while循环编写,如下所示-
    
    <%! int fontSize; %> 
    <html> 
       <head><title>WHILE LOOP Example</title></head> 
       
       <body>
          <%while ( fontSize <= 3){ %>
             <font color = "green" size = "<%= fontSize %>">
                JSP Tutorial
             </font><br />
             <%fontSize++;%>
          <%}%>
       </body> 
    </html> 
    
    尝试一下
    JSP运算符
    JSP支持Java支持的所有逻辑和算术运算符。下表列出了所有优先级最高的运算符出现在表格的顶部,而优先级最低的运算符出现在表格的底部。在表达式中,优先级较高的运算符将首先被计算。
    类别 描述 关联
    后缀 () [] .(点运算符) 左到右
    一元 ++ -- ! 〜 右到左
    乘性 * / % 左到右
    加减 + - 左到右
    位移 >> >>> << 左到右
    关系型 > >= < <= 左到右
    平等 == != 左到右
    按位与 & 左到右
    按位异或 ^ 左到右
    按位或 | 左到右
    逻辑与 && 左到右
    逻辑或 || 左到右
    三元运算 ? : 右到左
    分配 = += -= *= /= %= >>= <<= &= ^= |= 右到左
    逗号 , 左到右
    JSP字面量
    JSP表达式语言定义以下字面量-
    • Boolean − true 和 false
    • Integer −跟 Java 中一样
    • Floating 跟 Java 中一样
    • String − 单引号和双引号; :以\",以\'进行转义,并且\以\\进行转义。
    • Null − null