一、三大指令元素:
指令是一种JSP句法元素,提示JSP容器应该将某个JSP页面转换为Servlet的命令,这博客介绍其中三个指令元素。
1. page指令:
语法格式:<%@page attribute1="value1" attribute2="value2"...%>
page指令可以出现多次,不过除import属性外其余属性必须保持一致。
@和page之间的空格是可选的,attribute1等是page指令的属性,有如下属性:
(1) import:指定要导入的一种或多种Java类,供本页的的Java代码所用,当导入多种类时,用逗号隔开,其中servlet的相关类为隐式导入。
(2) session:值为true时,表示页面参与session管理,false则相反,默认为true。
(3) buffer:指定隐式对象out的缓冲区大小,单位为千字节,后缀为kb,也可以用none来表示不使用缓存。
(4) autoFlush:值为true时,表示当缓冲区满时,被缓存的输出应该自动刷新,默认为true。
(5) isThreadSafe:值为true时,表示页面中实现的线程安全级别,不建议使用。
(6) info:指定所生成的Servlet的getServletInfo方法返回值。
(7) errorPage:值为一个页面,表示负责处理该页面可能出现的错误的页面。
(8) isErrorPage:表明这个页面是否负责处理错误。
(9) contentType:指定该页面隐式对象response的内容类型,默认值为text/html
(10) pageEncoding:支付该页面的字符编码,默认值为ISO-8859-1,应该改成支持国际化标准的UTF-8。
(11) isELIgonred:表面是否忽略EL表达式。
(12) laguage:指定该页面使用的脚本语言,默认值为java
2. include指令
语法格式:<%@ include file="url"%>
利用include可以将另外一个文件的内容放在当前的JSP页面中,可以使用多个include指令,并且可以在任意位置,用于多个页面相同元素做成一个文件,再用include指令在其他页面有使用它的位置使用,节约大量代码量。
文件可以是JSP页面,HTML页面,Java代码等,url可以使用绝对路径与相对路径,用‘/’隔开。
注意:不要使用在file里使用标签,或与使用它的页面定义相同的变量等,以避免两者相互冲突。
3. taglib指令
语法格式:<%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>
uri属性用于对自定义标签进行命名,可以是相对路径或绝对路径,prefix指定了标签的前缀。
二、七大动作元素:
动作元素被编译成执行某个操作的Java代码,除了标准动作元素之外,还可使用自定义的标签。
1. forward动作
语法格式:<jsp:forward page="url">
<jsp: param name="" value=""/>
</jsp:forward>
forward动作式从当前页面跳转到另一个不同的资源,跳转方式为请求转发,也可包含请求转发的传递参数。
2. include动作
语法格式:<jsp:include page="url"/>
include动作用于动态地包含另外一个资源,可以包含JSP页面,HTML页面。
注意与指令元素include的区别:
第一:使用include指令时,这种包含是发生在页面转换的时候,例如JSP容器将页面转换成一个生成Servlet的时候,而使用include动作时,这种包含则是发生在请求的时候,当前页面和被包含的资源是两个独立的个体,因此可以使用include动作传递参数,而指令不行。
第二:在使用include指令时,被包含的文件的类型可以为任意,而使用include动作时,则扩展名必须为jsp,否则将其当成静态页面处理。
3. param动作
语法格式:<jsp:param name="" value=""/>
用于设定参数值,这个指令和include,forward,plugin配合使用。
4. plugin动作
用于下载服务器端的javabean或applet到客户端,插入通过Java插件运行applet所需的元素。
5. useBean动作
语法格式:<jsp:useBean id="" class="" scope=""/>
用于装载一个在JSP页面使用的JavaBean,即在JSP页面创建一个实例,常和getProperty,setProperty配合使用。JSP2.0有EL表达式后这种方式就很少使用了。
id为要创建的实例的名称,class为要实例化的类名,scope为bean的生存范围,page,request,session,application,默认值为page。
6. setProperty动作
语法格式:<jsp:setProperty name="" property="" value=""/>
用来给已经实例化的Bean对象的属性赋值。值得注意的是,当和useBean配合使用时,有两种方式,一种是放在useBean动作后,表示对已经存在的实例化对象进行赋值,另外一种是放在useBean内,这就意味着只有在新建Bean实例时才会执行给属性赋值。
name:实例化的Bean对象名,property:是要赋值的对象属性名,还有一种为’*‘的,这个表示所有Bean的属性名都将被传递的参数赋值。
value:是要赋的具体值,与param的使用二选一。
当property使用“*”时,那么value和param都不能使用,这种方法与表单元素相关联,就是将表单中所有元素与JavaBean属性进行对应,如果元素名与属性名相同,则将表单元素的值赋给对应的属性。
1 <form action="dologin.jsp" method="post"> 2 <label for="userName">用户名:</label> 3 <input type="text" name="userName" id="userName" value="" /> 4 <br/> 5 6 <label for="password">密码:</label> 7 <input type="password" name="password" id="password" value="" /> 8 <br/> 9 10 <input type="submit" value="登录" /> 11 </form>
1 public class User { 2 3 private String userName; 4 5 private String password; 6 7 public User() { 8 9 } 10 11 public String getUserName() { 12 return userName; 13 } 14 15 public void setUserName(String userName) { 16 this.userName = userName; 17 } 18 19 public String getPassword() { 20 return password; 21 } 22 23 public void setPassword(String password) { 24 this.password = password; 25 } 26 }
<jsp:useBean id="user" class="entity.User" scope="page"></jsp:useBean> <hr/> <jsp:setProperty property="*" name="user"/> 用户名:<jsp:getProperty property="userName" name="user"/><br/> 密码:<jsp:getProperty property="password" name="user"/>
7. getProperty动作
语法格式:<jsp:getProperty name="" property=""/>
用于提取指定Bean的属性的值,返回字符串,上述例子已说明。
三、三大脚本元素:
脚本元素将Java代码合并成一个JSP页面。JSP2.0增加了一个EL表达式脚本元素并且渐渐成为主流,而不是在JSP中写大量的Java代码,见上一博客。
1. 声明
语法格式:<%! declarations %>
声明在JSP页面中使用的变量和方法,用‘;’隔开,可以多个,任意位置,也可以用声明覆盖实现类中的init和destroy方法。
2. 脚本
语法格式:<% scriptlet %>
scriptlet是Java代码块。
3. 表达式
语法格式:<%= expression %>
表达式的运算结果会被填入隐式对象out的print方法中。