页面由以下几部分组成
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
指令相关联的属性 -
序号 | 属性 | 说明 |
---|---|---|
1 | buffer | 指定输出流的缓冲模型。 |
2 | autoFlush | 控制servlet输出缓冲区的行为。 |
3 | contentType | 定义字符编码方案。 |
4 | errorPage | 定义另一个报告Java未检查运行时异常的JSP的URL。 |
5 | isErrorPage | 指示此JSP页面是否是由另一个JSP页面的errorPage 属性指定的URL。 |
6 | extends | 指定生成的servlet必须继承的父类。 |
7 | import | 指定JSP中使用的包或类的列表,就像Java的import 语句一样。 |
8 | info | 定义可以使用servlet的getServletInfo() 方法访问的字符串。 |
9 | isThreadSafe | 定义生成的servlet的线程模型。 |
10 | language | 定义JSP页面中使用的编程语言。 |
11 | session | 指定JSP页面是否参与HTTP会话 |
12 | isELIgnored | 指定JSP页面中的EL表达式是否被忽略。 |
13 | isScriptingEnabled | 确定脚本元素是否被允许使用。 |
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 只有在下面三种情况下,才会把缓冲区的内容输出到客户端。
- 该 JSP 网页已完成信息的输出。
- 输出缓冲区己满。
- 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>
- autoFlush属性
当缓冲区满时,设置是否自动刷新缓冲区。默认值为 true,表示当缓冲区满时,自动将其中的内容输出到客户端;如果设为 false,则当缓冲区满时会出现 JSP Buffer overflow 溢出异常。
<%@ page autoFlush = "false" %>
当 buffer 属性的值设置为 none 时,autoFush 属性的值不能设置为 false。通常,buffer
和autoFlush
属性在page
指令中进行编码,如下所示:
<%@ page buffer = "16kb" autoflush = "true" %>
- 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标记注释
<%----%> 客户通过查看源代码的是不可见的,安全性高。