1. JSP编译指令(3个)
JSP的编译指令是通知JSP引擎(Tomcat、WebLogic)的消息,它不直接生成输出。
JSP引擎的工作原理:
当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤:
(1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序
(2)JSP引擎调用java编译器对这个Servlet进行编译,得到可执行文件class
(3)JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端
以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。当JSP引擎街道一个客户端的访问请求时,首先判断请求的JSP页面是否比对应的Servlet新,如果新,对应的JSP需要重新编译。
编译指令都有其默认值,因此无须为每个指令设置其值。
常见的编译指令有3个:
(1)、page:是针对当前页面的指令;
(2)、include:用于指定包含另一个页面;
(3)、taglib:用于定义和访问自定义标签。
使用编译指定的语法格式如下:
<%@ 编译指令名 属性1="属性值" 属性2="属性值" ...%>
1.1. page
针对当前页面的指令,通常位于JSP页面的顶端,一个JSP页面可以使用多page指令。
page指令格式如下:
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ page import="java.sql.*" %>
常用的page的属性如下:
(1)、contentType:用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型,默认MIME类型是text/html,默认的字符集类型为:ISO-8859-1;
(2)、language:声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,所以该属性的值通常都是java。
(3)、errorPage:指定错误处理页面,如果本页面产生了异常或者错误,而该页面没有对应的处理代码,则会自动调用该属性指定的JSP页面;
(4)、pageEncoding:指定生成网页的编码字符集;
(5)、import:用于导入包。下面几个包是默认自动导入的,不需要显示导入。默认导入的包有:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*;
1.2. include
语法格式为:<%@ include file="要包含的页面路径" %>
等价于<jsp:include file=””/>?他们都是静态包含,
注意和<jsp:include page=””/>动态包含的区别。
1.3. taglib
用于定义和访问自定义标签。
2. JSP动作指令(7个)
动作指令和编译指令不同,编译指令是通知Servlet引擎如何处理消息,而动作指令只是运行时的动作。
编译指令在将JSP编译成Servlet时起作用;而处理指令通常可替换成JSP脚本,它只是JSP脚本的标准化写法。
u jsp:forward:执行页面转向,将请求的处理转发到下一个页面。
u jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。
u jsp:include:用于动态引入一个JSP页面。
u jsp:plugin:用于下载JavaBean或Applet到客户端执行。
u jsp:useBean:创建一个JavaBean的实例。
u jsp:setProperty:设置JavaBean实例的属性值。
u jsp:getProperty:输出JavaBean实例的属性值
2.1. jsp:forward指令
jsp:forward指令用于将页面响应转发到另外的页面。既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet中。
jsp:forward指令的语法格式:
<jsp:forward page="path<%expression%>"> <jsp:param name="" value="" /> </jsp:forward> |
下面使用jsp:forward动作指令来转发用户请求:
jsp-forward.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>forward的原始页面</title> </head> <body> <h2>这是jsp:forward的原始页面</h2> <jsp:forward page="forward-result.jsp"> <jsp:param value="21" name="age"/> <jsp:param value="evan" name="name"/> </jsp:forward> </body> </html> |
将客户端请求转发到forward-result.jsp页面,转发时增加了二个请求参数:一个参数名为age,参数值为21,另一个参数名为name,参数值为evan。
在forward-result.jsp页面中,可以通过request内置对象来获取增加的请求参数值。
forward-result.jsp页面代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>forward跳转之后的页面</title> </head> <body> <h2>这是从jsp-forward页面跳转之后到得页面</h2> <!-- 使用request内置队形获取age和name参数的值 --> 姓名:<%=request.getParameter("name") %> 年龄:<%=request.getParameter("age") %> </body> </html> |
结果如下:
注意:JSP页面中有中文时,为防止出现中文乱码,使用UTF-8字符集。
2.2. jsp:include指令
jsp:include指令是一个动态include指令,也可以包含某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。(只导入body的内容)
include指令的格式如下:
<jsp:include page="<url|expressions>" flush='true'/>
或者为:
<jsp:include page="<url|expressions>" flush='true'>
<jsp:param name="请求参数名" value="请求参数值" />
</jsp:include>
flush属性用于指定输出缓存是否转移到被导入文件中。
实例:
jsp-include.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP:include指令测试</title> </head> <body> <h2>JSP:include指令测试,这是jsp-include.jsp页面</h2> <br> <!-- 使用动态include指令导入页面 --> <jsp:include page="jsp-include1.jsp" /> </body> </html> |
jsp-include1.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP:include指令测试</title> </head> <body> <h2>JSP:include指令测试,这是jsp-include1.jsp页面</h2> </body> </html> |
执行结果如下:
2.3. jsp:useBean、jsp:setProperty、jsp:getProperty指令
这三个指令都是和javaBean相关的指令,其中:
jsp:useBean指令用于在JSP页面中初始化一个JAVA实例;
jsp:setProperty指令用于为JavaBean实例的属性设置值;
sp:getProperty指令用于输出JavaBean实例的属性。
jsp:useBean指令的语法格式为:
<jsp:useBean id="name" class="classesname" scope="page | request | session | application" />
其中,id属性为JavaBean的实例名,class属性确定JavaBean的实现类。
scope属性用于指定JavaBean实例的作用范围,该范围有如下4个值:
(1)、page:该JavaBean实例仅在该页面中有效;
(2)、request:该JavaBean实例在本次请求中有效;
(3)、session:该JavaBean实例在本次session内有效;
(4)、application:该JavaBean实例在本应用内一直有效。
jsp:setProperty指令的语法格式如下:
<jsp:setProperty name="BeanName" proterty="propertyName" value="value" />
其中,name属性确定需要设定JavaBean的实例名;
proterty属性确定需要设置的属性名;
value属性则确定需要设置的属性值。
jsp:getProperty指令的语法格式如下:
<jsp:getProperty name="BeanName" proterty="propertyName" />
其中,name属性确定需要输出JavaBean的实例名;
proterty属性确定需要输出的属性名;
2.4. param指令
param用于设置参数值,这个指令本身不能单独使用,因此单独的param指令没有实际意义,param指令可以与以下指令结合使用:
<jsp:include ..
<jsp:forward..
<jsp:plugin ..
3. JSP标签
Jsp动作指令通常也被称之为标签…
3.1. jsp 注释
JSP注释:<%-- 注释内容 --%>
HTML注释:<!-- 注释内容 -->
在jsp声明和jsp脚步中你还可以使用java注释
3.2. jsp声明
<!% %>可以声明变量和方法
3.3. jsp脚本
<% %>
3.4. jsp表达式
<%=表达式%>输出表达式的值
3.5. 自定义标签
说起自定义标签我们先来说说javabean
JavaBean其实就是一个类,一个JavaBean实例叫做:Bean,它通过具体的“方法”实现相应的逻辑功能,并且为外部操作提供接口,外部JSP通过这些接口可以方便地使用它实现逻辑功能,这样就实现了代码的重用以及逻辑功能与页面显示层分离,它的好处就是解决了在JSP页面中实现逻辑功能会出现相同的代码在很多文件中出现导致不利于维护和更新的缺陷,并且可以逻辑功能程序员和页面编辑员的分工,让其各自在各自的领域里全心工作。
自定义标签:
自定义标签其实也是一个类,它封装了相应的逻辑功能,和JavaBean很类似,但是它们之间存在很大的区别:JavaBean通过提供接口供外部操作调用实现逻辑功能,而自定义标签是通过标签的形式为外部操作实现逻辑功能,例如JSP已有的标签:<jsp:forward>,它的好处就是调用十分方便,形式:<jsp:forward page="转向页面的url">就实现了其功能,其中的“JSP”代表的是标签库名,“forward”代表的是标签名,自定义标签的最终形式也很类似:<a:b>其中的a代表的是自定义库名,b代表的是自定义标签名,当然它是包含在a中的。