三、JSP语法(页面组成)


页面由以下几部分组成

1静态内容

2JSP指令

3JSP脚本元素(java程序片断)

4表达式

5JSP声明

6注释

1 静态内容

  • <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
      <head>
      <body></body>
    </html>
    

    DOCTYPE模块

    文档声明,位于页面的首行,告知浏览器使用哪种HTML版本规范方式解析网页,使网页能正常显示。

    html模块

    告诉页面这是一个html文档。

    在<html>部分中,又分为两小部分,第一部分为head模块,第二部分为body模块

    🔴head模块

    这部分属于网页的头部,这部分中描述了HTML文件的各种属性和信息,如网页的标题,字符编码,是否启用缓存,引用的外部脚本和样式等等。在这head标签里写的内容不会在网页的正文内容中显示出来。

    • title标签表示网页的标题。

    • meta标签提供有关页面的元信息,比如针对搜索引擎的关键字、缓存时间、启用浏览器内核等等,meta标签有两个主要属性name和http-equiv。

      • name属性

      主要用于描述网页,比如定义网页的关键词,关键内容、标注作者、版权等。

      常用name属性值

      keywords——用于告诉搜索引擎]网页的关键字。

      description——用于告诉搜索引擎网站的主要内容。

      robots——用来告诉爬虫哪些页面需要索引,哪些页面不需要索引。

      author——用于标注网页的作者信息。

      generator——用于标注网页是用什么IDE做的。

      copyright——用于标注版权信息。

      renderer——用于指定双核浏览器默认以什么方式进行页面渲染content="webkit"为webkit内核,content="ie-comp"为IE兼容模式,content="ie-stand"为IE标准模式。

      • ttp-equiv属性

      主要用于设置网页的字符集,缓存机制等。

      <meta http-equiv="属性值" content="参数"/>
      

      常用http-equiv属性值

      content-type——设定网页字符集。

      X-UA-Compatible——用于告知浏览器以什么种版本来渲染页面。

      cache-control——设置浏览器如何缓存某个响应以及缓存多长时间。

      Set-Cookie——设置cookie设定。

    🔴 body模块

    HTML的主体,网页的文本、超链接、图像、表格、视频等所有在网页上显示的内容都写在这里。

2 JSP指令

  • <%@ 指令名称 属性1=“属性值1” 属性2=“属性值2” … 属性n=“属性值n” %>,设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。告诉引擎(Tomcat)如何处理 JSP 页面中的其余部分。JSP 引擎会根据 JSP 的指令信息来编译 JSP,生成 Java 文件。一般都会把 JSP 指令放到 JSP 文件的最上方。

JSP 中三大指令,它们分别是 page、include 和 taglib

指令描述
<%@ page … %>定义网页依赖属性,它的属性很多,常用的属性有 import、language、pageEncoding 等
<%@ include … %>静态包含指令,用于引入其它 JSP 文件。使用 include 指令引入的其它 JSP 文件,JSP 引擎将把这两个 JSP 文件翻译成一个 servlet,所以将 include 称为静态包含。
<%@ taglib … %>引入标签库的定义,用于在 JSP 页面中导入标签库(JSP 标准标签库、第三方标签库、自定义标签库)。

2.1 page 指令

表列出了与page指令相关联的属性 -

序号属性说明
1buffer指定输出流的缓冲模型。
2autoFlush控制servlet输出缓冲区的行为。
3contentType定义字符编码方案。
4errorPage定义另一个报告Java未检查运行时异常的JSP的URL。
5isErrorPage指示此JSP页面是否是由另一个JSP页面的errorPage属性指定的URL。
6extends指定生成的servlet必须继承的父类。
7import指定JSP中使用的包或类的列表,就像Java的import语句一样。
8info定义可以使用servlet的getServletInfo()方法访问的字符串。
9isThreadSafe定义生成的servlet的线程模型。
10language定义JSP页面中使用的编程语言。
11session指定JSP页面是否参与HTTP会话
12isELIgnored指定JSP页面中的EL表达式是否被忽略。
13isScriptingEnabled确定脚本元素是否被允许使用。

1. buffer属性

默认情况下,服务端要输出到客户端的内容不直接写到客户端,而是先写到一个输出缓冲区中,out 对象是一个输出流,用来向客户端输出数据,buffer属性用于设置out对象所使用的缓冲区大小,默认大小是8KB。

可以编写指一个none值来指定不使用缓冲,指示servlet将输出直接写入响应输出对象
插入代码片

<%@ page buffer = "none" %>

使用以下命令来指示servlet将输出写入大小不小于64KB字节的缓冲区。

<%@ page buffer = "64kb" %>

JSP内置对象out的方法
public abstract void clear() 清除缓冲区中的内容,不将数据发送至客户端
public abstract void clearBuffer() 将数据发送至客户端后,清除缓冲区中的内容
public abstarct void close() 关闭输出流。
public abstract void flush() 输出缓冲区中的数据。
public int getBufferSize() 获取缓冲区的大小。缓冲区的大小可用<%@ page buffer=“size” %>设置
public abstract int getRemainning() 获取缓冲区剩余空间的大小
public boolean isAutoFlush() 获取用<%@ page is AutoFlush=“true/false”%>设置的AutoFlush值
public abstract void newLine() 输出一个换行字符,换一行
public abstract void print() 显示各种数据类型的内容
public abstract void println() 分行显示各种数据类型的内容

JSP 只有在下面三种情况下,才会把缓冲区的内容输出到客户端。

  1. 该 JSP 网页已完成信息的输出。
  2. 输出缓冲区己满。
  3. JSP 中调用了 out.flush()response.flushBuffer()
<%@ page import="static java.lang.Thread.sleep" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    for (int i = 0;i<100;i++){
            out.println(i);
    }
    out.flush();//添加该行,页面先显示数据,页面仍在加载中,若去除,则需要页面加载完毕后显示页面内容。
    sleep(10000);
%>

</body>
</html>

  1. autoFlush属性

当缓冲区满时,设置是否自动刷新缓冲区。默认值为 true,表示当缓冲区满时,自动将其中的内容输出到客户端;如果设为 false,则当缓冲区满时会出现 JSP Buffer overflow 溢出异常。

<%@ page autoFlush = "false" %>

当 buffer 属性的值设置为 none 时,autoFush 属性的值不能设置为 false。通常,bufferautoFlush属性在page指令中进行编码,如下所示:

<%@ page buffer = "16kb" autoflush = "true" %>
  1. contentType属性

contentType属性设置JSP页面和生成的响应页面的字符编码。 默认内容类型为:text/html,它是HTML页面的标准内容类型。

如果要从JSP输出为XML,请使用以下page指令 -

<%@ page contentType = "text/xml" %>

以下语句指示向浏览器生成的页面呈现为HTML

<%@ page contentType = "text/html" %>

以下指令将内容类型设置为:Microsoft Word文档 -

<%@ page contentType = "application/msword" %>

还可以指定响应的字符编码。 例如,如果要指定返回浏览器的结果页面使用:UTF-8,则可以使用以下page指令

<%@ page contentType = "text/html:charset=UTF-8" %>

4. errorPage属性

如果希望在当前页面运行时出现错误时,指定一个错误提示页面,那么errorPage属性告诉JSP引擎显示哪个页面。errorPage属性的值是相对URL。

<%@page errorPage="error.jsp" %>

5. isErrorPage属性

isErrorPage属性表示当前的JSP页面可以用作另一个JSP的错误页面。isErrorPage属性的默认值为false。将isErrorPage选项设置为true后,可以使用 jsp内置对象exception的toString().可以捕捉到错误信息。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isErrorPage = "true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%=exception.toString()%>
</body>
</html>

6. extends属性

extends 指定生成的servlet必须继承的父类。

例如,以下指令指示JSP转换器生成servlet,继承自somePackage.SomeClass -

<%@ page extends = "somePackage.SomeClass" %>

7. import属性

import属性与Java import语句具有相同的功能,设置要导入的程序包的名称。

例如,要导入java.sql.*,请使用以下page指令 -

<%@ page import = "java.sql.*" %>

要导入多个包,可以使用逗号分隔,如下所示:

<%@ page import = "java.sql.*,java.util.*"  %>

默认情况下,容器会自动导入java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*

8. info属性

定义可以使用servlet的getServletInfo()方法访问的字符串。

<%@ page info = "This JSP Page Written By yiwu"  %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage = "./test2.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    out.print(getServletInfo());
 %>
</body>
</html>

9. isThreadSafe属性

设置 JSP 页面是否可以多线程访问。默认值为 true,表示当前 JSP 页面被转换为 Servlet 后,会以多线程的方式处理来自多个用户的请求;如果设置为 false,则转换后的 Servlet 会实现 SingleThreadMode 接口,并且将以单线程的方式来处理用户请求。如下例:只有一个请求页面输出完1到10后,第二个请求页面才能接着输出。

<%@ page import="static java.lang.Thread.sleep" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isThreadSafe="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
   for(int i = 0;i<10;i++){
       out.println(i);
       out.flush();
       sleep(1000);
   }
 %>
</body>
</html>

10. language属性

language属性指示在JSP页面脚本编写中使用的编程语言,目前仅支持java。

<%@ page language = "java" %>

11. session属性

表示当前页面是否支持 session,如果为 false,则在 JSP 页面中不能使用 session 对象。

<%@ page session = "true" %>

12. isELIgnored属性

其值可设置为 true 或 false,表示是否在此 JSP 网页中执行或忽略表达式语言 ${}。设置为 true 时,JSP 容器将忽略表达式语言。

13. isScriptingEnabled属性

isScriptingEnabled 属性确定该脚本元素被允许使用。该默认值(true)。若置为false,那么在JSP中使用任何脚本,表达式(非EL)或声明,则会引发翻译时错误。如果要限制脚本元素,则可以将该属性的值设置为false

<%@ page isScriptingEnabled = "false" %>

2.2 include 指令

JSP可以通过include指令来包含其他文件。该指令是静态包含,被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址" %>

2.3 taglib 指令

声明该页面中所使用的标签库,同时引用标签库,指定标签的前缀。在页面引用标签库后,就可通过前缀来引用标签库中的标签。代码如下。

<%@ taglib prefix="tagpreFix" uri="tagUri"%>

参数说明:

preFix:用于指定标签的前缀。但该前缀不能命名为jsp、jspx、java、javax、sun、servlet。

uri:用于指定标签库文件的存放位置。代码如下。

<%@ taglib prefix="c" uri="http://java.xxx/xxx/xxx"%>

3 JSP脚本元素(java程序片断)

  • JSP页面中嵌入JAVA代码,实现页面的动态处理 。
  • 定义在<%%>中,其中定义的变量为局部变量,作用域按照页面中定义的范围,先定义,后使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% //out.print(a);
    int a = 7;
    int b = 8;
    out.print(a);
%>
</body>
</html>

4 表达式

  • 语法<%=java变量或表达式%>

    变量:要在页面显示的值的变量名

    表达式:其值由服务器计算,计算结果以字符串的形式发送到客户端

    jsp 的表达式常用在以下几种情况

    1、向页面输出内容

    2、生成动态的连接地址

    3、动态指定form表单处理页面

5 JSP声明

JSP 编写java脚本是需要用到的成员变量和方法。**声明变量和方法类,与声明位置无关,作用范围是整个页面,且各个用户共享。**语法格式:<%! 变量/方法/类的声明 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--这是注释,查看源代码不可见--%>
<--这是注释,查看源代码可见--%>
<!--页面中声明位置在使用位置之后-->
<%=a++%>
<%=myFunc()%>
<%=myFunc2()%>
<!--变量-->
<%!int a = 0;%>
<!--方法-->
<%!int myFunc(){
    return 5;
};%>
<%!int myFunc2(){
    myClass b= new myClass();
    return b.myFunc2();
};%>
<!---->
<%!class myClass{
    int myFunc2() {
        return 6;
    }
};
%>
</body>
</html>

6 注释

1.HTML注释

<!–xxxx–> 用户查看源代码的是可见的,是不安全的,并且会加大网络传输负担

2. jsp标记注释

<%----%> 客户通过查看源代码的是不可见的,安全性高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老去的90后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值