【JSP】赵雅智_jsp语法

JSP语法

  • JSP模版元素
    • JSP页面中的HTML内容称之为JSP模版元素。
    • JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
  • JSP表达式
    • JSP脚本表达式(expression)用于将程序数据输出到客户端
      语法:<%= 变量或表达式 %>
      举例:当前时间:<%= new java.util.Date() %>
    • JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端
    • JSP脚本表达式中的变量或表达式后面不能有分号(;)。

  • JSP脚本片断
    • JSP脚本片断(1)
      • JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码。语法:
        <% 多行java代码 %>
      • 注意:JSP脚本片断中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。
      • JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。
    • JSP脚本片断(2)
      • 在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。
        举例:
        <%
        int x = 10;
        out.println(x);
        %>
        <p>这是JSP页面文本</p>
        <%
        int y = 20;
        out.println(x);
        %
      • 多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。如:out.println(x)
    • JSP脚本片断(3)
      • 单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句,例如:
        <%
        for (int i=1; i<5; i++) 
        {
        %>
        <H1>www.it315.org</H1>
        
        <%
        }
        %> 
        

  • JSP声明
    • JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面。语法:
      <%!
      java代码
      %>
    • 所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。
    • 多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
    • JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。

      <%!
      static
      {
      System.out.println("loading Servlet!");
      }
      private int globalVar = 0;
      public void jspInit()
      {
      System.out.println("initializing jsp!");
      }
      %>
      <%!
      public void jspDestroy()
      {
      System.out.println("destroying jsp!");
      }
      %>

  • JSP注释
    • JSP注释的格式:
      <%-- 注释信息 --%>
    • JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
    • 有三种注释方式
      • HTML注释(输出注释):指在客户端查看源代码时能看见注释。例如,
        <!-- this is an html comment.it will show up int the response. -->
      • JSP页注释(隐藏注释):指注释虽然写在JSP程序中,但不会发送给客户,因此在客户端查看源代码时不能看见注释。这样的注释在JSP编译时被忽略掉。
        <%--this is a JSP comment.it will only be seen in jsp code--%>
      • Java注释:只能出现在Java代码区中,不允许直接出现在页面中。//单行注释 /*多行注释*/
        实例练习—JiuJiudem
        1. 编写JiuIndex1.jsp页面,页面中提供两个输入文本框,用来收集用户提交的数据,并提供“提交”和“取消”按钮
          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
            
              <title>My JSP 'JiuIndex.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>
            <p align="center">请输入数据打印乘法口径表</p>
            <form action="JiuResult.jsp" method="post">
              <table border="1px" cellpadding="0" cellspacing="0" align="center">
          			<tr>
          			<td>startNumber</td>		
          			<td><input type="text" name="startNum"/></td>
          			</tr>
          			
          			<tr>
          			<td>endNumber</td>		
          			<td><input type="text" name="endNum" /></td>
          			</tr>
          			
          			<tr>
          			<td></td>		
          			<td><input type="submit" value="提交" /><input type="reset" value="重置" /></td>
          			</tr>
          			</table>
          			</form>
            </body>
          </html>
          

          【JSP】赵雅智_jsp语法_第1张图片
        2. 编写JiuResult1.jsp页面,根据用户提交的数字,显示基于这个数字所形成的乘法表。
          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
             
              <title>My JSP 'MyJsp1.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>
          			<%
          			int startNum = Integer.parseInt(request.getParameter("startNum"));
          			int endNum = Integer.parseInt(request.getParameter("endNum"));
          			 for(int i=0; i<=endNum; i++){
                 			for(int j=startNum; j<=i; j++){
                     		 out.print(i+"*"+j+"="+j*i);
                     		 out.print("   ");
                 	} 
                 out.print("<br>"); 
          
             }			
                %>		
            </body>
          </html>
          


  • JSP指令
    • JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
    • JSP指令的基本语法格式:
      <%@ 指令 属性名="值" %>
      举例:<%@ page contentType="text/html;charset=gb2312"%>
    • 如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

      例如:
      <%@ page contentType="text/html;charset=gb2312"%>
      <%@ page import="java.util.Date"%>

      也可以写作:
      <%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>      
    • 在JSP 2.0规范中共定义了三个指令:
      1. page指令
        • page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面

        • 为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置

        • JSP 2.0规范中定义的page指令的完整语法:
          <%@ page

          • [ language="java" ]
          • [ extends="package.class" ]
          • [ import="{package.class | package.*}, ..." ]
            • JSP 引擎自动导入下面的包:
              java.lang.*
              javax.servlet.*
              javax.servlet.jsp.*
              javax.servlet.http.*
            • 可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:
                <%@ page import="java.util.Date,java.sql.*,java.io.*"%>
            • 上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:
               <%@ page import="java.util.Date"%>
                <%@ page import="java.sql.*"%>
                <%@ page import="java.io.*"%>
          • [ session="true | false" ]
          • [ buffer="none | 8kb | sizekb" ]
          • [ autoFlush="true | false" ]
          • [ isThreadSafe="true | false" ]
          • [ info="text" ]
          • [ errorPage="relative_url" ]
            • errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。

            • 可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以“/”开头的错误处理页面的路径。

            • 如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用

          • [ isErrorPage="true | false" ]
          • [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
            • JSP引擎会根据page指令的contentType属性生成相应的调用ServletResponse.setContentType方法的语句。
            • page指令的contentType属性还具有说明JSP源文件的字符编码的作用。
          • [ pageEncoding="characterSet | ISO-8859-1" ]
          • [ isELIgnored="true | false" ]
            %>
        •  

          使用page指令解决JSP中文乱码
          1. JSP程序存在有与Servlet程序完全相同的中文乱码问题

            1. 输出响应正文时出现的中文乱码问题

            2. 读取浏览器传递的参数信息时出现的中文乱码问题

          2. JSP引擎将JSP页面翻译成Servlet源文件时也可能导致中文乱码问题

            1. JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员可以采用各种字符集编码来编写JSP源文件,因此

            2. JSP引擎将JSP源文件翻译成Servlet源文件时,需要进行字符编码转换。

            3. 如果JSP文件中没有说明它采用的字符集编码,JSP引擎将把它当作默认的ISO8859-1字符集编码处理。

          3. 如何解决JSP引擎翻译JSP页面时的中文乱码问题

            1. 通过page指令的contentType属性说明JSP源文件的字符集编码

            2. page指令的pageEncoding属性说明JSP源文件的字符集编码

      2. Include指令
        • include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
        • 语法:
          <%@ include file="relativeURL"%>
          其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
        • 细节:
          • 被引入的文件必须遵循JSP语法。
          • 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
          • 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
      3. taglib指令
        Taglib指令用于在JSP页面中导入标签库,讲自定义标签技术时讲。
  • JSP标签
  • JSP内置对象
  • 如何查找JSP页面中的错误

你可能感兴趣的:(【JSP】赵雅智_jsp语法)