一、脚本元素
符号:<%%>
在该脚本段中所以的内容,最终会出现在一个java方法中。所以,在java的方法中能写什么内容,在<%%>中就能写什么内容
Java方法中能写的内容 |
局部变量,局部内部类,各种程序结构(if for..) |
Java方法中不能写的内容 |
方法,static,4种访问修饰符 |
该脚本段中写的内容,会出现在类之内,方法之外。所以,在java的类之内,方法之外能写什么内容,在<%! %>中就能写什么内容
java的类之内,方法之外能写 |
属性 方法 块 内部类 |
java的类之内,方法之外不能写 |
程序结构 表达式 |
符号:<%= %>
在该脚本端中所写的内容,最终会成为out.print()的参数。所以在java的方法参数中,能写什么,<%=%>就能写什么。
java的方法参数能写 |
表达式 |
java的方法参数不能写 |
除了表达式以外,都不能写 |
符号:<%----%>
该脚本用于告诉web服务器,在把一个jsp文件解析出一个java源文件的过程中,忽略该脚本中的内容,也就是说,<%-- --%>脚本中的内容根本不会出现在java源文件中。
2个术语:
客户端注释: <!-- --> (不但会出现在java源文件中。而且还会被web服务器发送给客户端浏览器)
服务器端注释 <%-- --%> // /* */ (// /* */ 注释的内容会出现在java源文件中)
注意:jsp页面只有在第一次访问的时候才会实例化对象,在之后访问的同一个jsp页面时,都使用的是第一次已经创建好的实例
测试方法:在jsp页面使用<!%%>方法创建一个变量,同时调用它,同时开启多个客户端观察变量值,是不是在多个客户端累加的,如果是则说明是调用了一个实例
二、指令元素
符号:<%@%>
page指令元素属性.
import |
用于引入外包的class |
|
Buffer |
用于控制当前jsp页面的缓冲区大小,默认值为8kb |
缓冲区的作用:提高读写速度。 缓冲区就是用来积攒数据的地方。 缓冲区中的数据,何时会被发送到目的地 1. 缓冲区已经放满数据了,再多放一个字节。 2. 强制发送缓冲区中的数据。 利用flush()方法 |
contentType |
用于告诉浏览器,服务器给你发送的是什么格式的数据。 |
|
errorPage |
当当前jsp页面中抛出异常的时候,指定的跳转页面 |
<%@page errorPage="error.jsp"%> |
isThreadSafe |
控制web服务器是否对该jsp页面支持并发,取值为true就表示支持并发 |
<%@page isThreadSafe="true"%> |
pageEncoding |
1 .Jsp-->java过程中,就是使用该属性指定的码表来生成java源文件的。 2.告诉浏览器使用什么码表。 |
|
include:静态包含
三、动作元素
符号:<jsp:xxx>
1、<jsp:useBean /> 等价于实例化对象
了解javabean:
javabean就是一个普通的java类而已,不过要符合一些规范
1、所有属性必须私有化
2、必须为私有化属性提供公共的getter(获取器)和setter(设置器)
3、必须提供一个公共的无参的构造器
4、必须实现序列化接口:java.io.Serializable
使用<jsp:useBean />,先在src目录下定义一个java类,这个类最终能在WebRoot目录下的jsp文件中使用。
实际上,在一个web应用的src下定义的java源文件,会被编译,编译出来的字节码文件会自动被部署到tomcat服务器下,路径就是/web应用名/web-inf/classes
而web应用的类路劲是有3部分组成的,也就是收,web应用在找一个字节码文件的时候,会在一下3个范围中查找:1、/web应用名/web-inf/classes,2、JRE System Libary,3、Java EE 5 Libaries/
2、<jsp:setProperty />等价于给对象的属性赋值
3、<jsp:getProperty />等价于获取对象的属性
注意:
<jsp:useBean/> 会回调公共的无参构造器
<jsp:setProperty /> 会回调对应的setter方法。
<jsp:getProperty /> 会回调对应的getter方法。
4、<jsp:include />动态包含
经典面试题: 静态包含与动态包含的区别:
(1)静态包含是先包含,后编译; 最终只能生成一个java源文件!class也是一个
动态包含是先编译,后包含。最终生成多个java源文件!class也是多个
(2)静态包含不能用变量名作为路径; 动态包含就可以用变量名作为路径。
(3) 静态包含不能给被包含的目标jsp页面传递参数;动态包含就可以!
(4)一个页面上的多个静态包含的页面中,不能有同名的变量;动态包含就可以!
5、<jsp:forword >转发
不用点击可以直接跳转到某个jsp页面
6、<jsp:param />
给服务器传递参数的,但是该标记必须搭配<jsp:include />或者<jsp:forward/>
注意:
如果没有给被动态包含的页面传递参数,
<jsp:include>和</ jsp:include>之间不能有任何内容,必须贴紧
<jsp:forward>和</ jsp: forward>之间不能有任何内容,必须贴紧