zoukankan      html  css  js  c++  java
  • JSP基础(二)JSP语法概述

     

    JSP基础(二)JSP语法概述

    JSP语法概述

      JSP原始代码中包含了JSP元素Template(模板)data两类。

      Template data指的是JSP引擎不处理的部分,即标记<%...%>以外的部分,例如代码中的HTML的内容等,这些数据会直接传送到客户端的浏览器。

      JSP元素则是指将由JSP引擎直接处理的部分,即标记<%...%>以内的部分,这一部分必须符合Java语法,否则会导致编译错误。

    JSP语法

      JSP语法分为三种不同的类型:

    1.编译器指令(DIRECTIVE)

      编译器指令包括“包含指令”“页指令”和“taglib指令”,它们包含在<%@  %>卷标里。

      两个主要的指令是page与include。

     

      Page指令用于定义JSP文件中的全局属性。

      Page指令作用于整个JSP页面,同样包括静态的包含文件,但是不能作用于动态的包含文件。

      可以在一个页面中用上多个Page指令,但是其中的属性只能用一次,但是import属性是个例外,可以用多次。

      无论Page指令放在哪里,它的作用范围都是整个JSP页面,为了可读性,最好还是放在文件顶部。

     

      比如:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

      import属性用于导入包,多个包可以用逗号隔开,也可以多次写page指令,导入不同的包。

      包含指令:

      include指令:向当前页中插入一个静态文件的内容。

      JSP语法格式如下:

    <%@ include file="relativeURL" %>
    
    <%@ include file="相对位置" %>

     

      taglib指令

      语法:  

    <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>

      用于引入定制标签库。

    2.脚本语法(SCRIPTING)

      脚本语法包括:

      1.HTML注释:<!-- comments -->
    
      2.隐藏注释(JSP注释):<%-- comments --%>
    
      3.声明;
    
      4.表达式;
    
      5.脚本段;

      HTML注释会发送到客户端(浏览器查看源代码可见),但是隐藏注释(JSP注释)不会发送到客户端,仅在JSP的源文件里有;两种注释都不会显示在页面上。

        <!-- 这是HTML注释: 页面不可见,但查看源文件可见 -->
        <!-- 下面这是一个表达式: (服务器会计算出表达式的值,放在HTML注释中)-->
        <!-- <%= new java.util.Date() %>-->
        
        <%-- 这是JSP注释:页面不可见,查看源文件也不可见 --%>
        <%-- new java.util.Date()--%>

    JSP声明语法格式如下:

    <%! declaration; [declaration;]...%>
    
    <%! 声明; [声明;]...%>

      引入一个声明的例子:

      用声明的方式定义一个变量a,用脚本段的方式定义一个变量b,输出a和b的值并且递减。

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    </head>
    
    <body>
        This is my JSP page. —— 圣骑士Wind
    <%= new java.util.Date().toLocaleString() %>
    <br>
        <!-- 这是HTML注释: 页面不可见,但查看源文件可见 -->
        <!-- 下面这是一个表达式: (服务器会计算出表达式的值,放在HTML注释中)-->
        <!-- <%= new java.util.Date() %>-->
        
        <%-- 这是JSP注释:页面不可见,查看源文件也不可见 --%>
        <%-- new java.util.Date()--%>
        
        <!-- 声明 -->
        <!-- 声明的方式 -->
        <%! int a = 3; %>
        <!-- 脚本段的方式 -->
        <% int b = 3; %>
        <!-- 输出a和b的值 -->
        <%= a-- %><br>
        <%= b-- %>
        <!-- 每次刷新页面,a的值会递减,b的值不变 -->
        
    
    </body>
    </html>

      每次刷新页面,可以看到a的值递减,但是b的值仍然保持为3。

      为什么呢?

      可以查看生成的Servlet代码,a在JSP中是声明,生成的Servlet,即Java代码中,a被转换成成员变量

      b在JSP中是脚本段,生成的Servlet代码中,b是方法的局部变量

      Servlet是单实例的,所以多次访问时访问的都是同一个对象,成员变量a是同一个,而b,每次都会生成新的。

      声明很少用,通常用脚本段。

      因为多个用户访问时,需要互不影响,脚本段中的值是局部变量,每个用户访问的时候各有一份;成员变量的值只有一个,每个用户都会访问到它。

    表达式:

      表达式用于在页面上输出信息,语法格式如下:

          <%= expression %>
    
          <%= 表达式 %>

    脚本段:

          <% code fragment %>
    
          <% 代码 %>

      其中代码是任何符合语法要求的Java代码

    3.动作语法(ACTION)

      动作语法包括:

      <jsp:forward> 该指令用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面。

      <jsp:include> 包含一个静态或动态文件,可以向被包含的文件传递参数。

      <jsp:getProperty>

      <jsp:setProperty>

      <jsp:useBean>

    参考资料

      圣思园张龙老师视频教程。

  • 相关阅读:
    [CTF]Capture The Flag -- 夺旗赛
    [DesignPattern]Builder设计模式
    [Git]Git 常用的操作命令
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
    QT 实现 读取 增加 删除 实时操作xml
    QT5-图形视图框架
    C++之QT
    ,即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
    要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给
    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
  • 原文地址:https://www.cnblogs.com/mengdd/p/3137230.html
Copyright © 2011-2022 走看看