这三个指令都是与JavaBean相关的指令。其中useBean指令用于JSP页面初始化Java实例。setProperty指令用于JavaBean实例设置相关属性。getProperty指令用于JavaBean实例获取相关属性。
JSP 九大内置对象:
1、application-- javax.servlet.ServletContext。该实例代表JSP所属的Web应用本身。
application 通过setAttribute方法设置application的某个属性,该属性值可以作用于整个Web。因此在Web内可以使用getAttribute获取该属性。需要指出的是:虽然使用application(即Servlet实例)可以方便多个Servlet,多个JSP共享数据,但不要仅仅为了JSP、Servlet共享数据就将数据放Application中!由于Application代表了整个的Web因此,因为只有关于整个Web项目的配置信息,数据才会放入Applicationapplication 还有一个重要的用处:可用于获取Web应用的配置参数。web.xml
注意:通过Web获取配置参数的方式,可以将一些配置信息放在web.xml文件中配置。
避免使用硬编码方式写在代码中,该种方式可以更好的程序的移植性。
2、config-- javax.servlet.ServletConfig该实例代表JSP所属的配置信息。
config对象代表当前JSP页面的配置信息。但JSP页面通常无须配置。因此也就不存在配置信息。所以JSP页面比较少用该对象。但是Servlet中则用处相对较大,因为Servelt需要在web.xml文件中进行配置。
3、exception -- java.lang.Throwable该实例代表JSP所属其他页面的异常和错误。
exception对象是Throwable的实例,代表JSP脚本中产生的错误和异常。是JSP页面异常机制的一部分。在JSP脚本中无须处理异常。事实上,JSP脚本包含的所有的可能出现的异常都交给错误页面处理。
注意:exception 对象仅在异常处理页面中有效,通过异常处理结构可以看出。
注意:由于只有JSP脚本,输出表达式才会对应于_jspService()方法里的代码。所以这两个部分的代码无须关心异常。但是在JSP的声明部分依然需要处理异常。JSP异常处理机制对JSP的声明不起作用。
注意:在异常处理的页面中,应该在page指令中isErrorPage添加上并且设置为true,
只有该属性设置为true时,才可以访问exception内置对象。
4、page -- 代表页面本身。也就是Servlet的this
5、out-- javax.servlet.jsp.JspWriter该实例代表JSP的输出流
out: 其实就是输出流。通常用于输出变量的值。
注意:<%=> 本质等于 out.write() 输出表达式
6、pageContext -- javax.servlet.jsp.PageContext该实例代表页面的上下文
pageContext: 该对象表示页面上下文,用于访问对象之间共享数据
7、request-- javax.servlet.HttpServletRequest 该实例封装一个请求
request 对象是JSP重要的对象。每个request都会是一个用户的请求。这个请求里面包含了所有的用户需要传递的参数。request 重要的特性:可以操作表示一个request请求范围。所有的web应用都会有请求与响应,没有请求与响应就没有web开发!
8、response -- javax.servlet.HttpServletResponse该实例代表客户端的响应
response: 代表服务端的响应。基本上大部分时间服务器无须使用response。因为可以直接使用更简单的out。out就是代表输出流。
9、session -- javax.servlet.HttpSession该实例代表一次会话
Cookie 时常是用来表示或者记录网站的数据。比如用户购物车。Session 一般是存放在服务器的。用户每次访问网站的时候,都会携带cookie,网站后台可根据携带cookie找到session。Cookie和Session的最大不同之处在于,session会随着浏览器的关闭而消失。Cookie会保留一段时间,具体时间看设置。
JSP 四大作用域:
application:服务器启动到停止这段时间。
session:HTTP会话开始到结束这段时间。
request:HTTP请求开始到结束这段时间。
page:当前页面从打开到关闭这段时间。
JSP/Servlet 生命周期
JSP本质就是Servlet。只是把开发好的JSP页面将由Web容器编译成对应的Servlet。当Servlet在运行时,其实这个过程并不是由开发者决定的。而是由Web容器控制的。
注意,创建Servlet实例有2个时机:
1、客户端第一次请求某个Servlet,系统创建该Servlet实例。其实现在大部分的Servlet都是该种。
2、Web应用启动时立即创建Servlet实例,即load-on-startup Servelt 每一个Servlet生命周期的如下:
1)、创建Servlet实例。
2)、Web应用启动时,调用Servlet的init方法。对Servlet进行初始化。
3)、Servlet初始化后,一直存在容器内。用于响应客户端请求。
4)、Web容器决定销毁Servlet时,先调用destroy方法。
5)、销毁Servlet。
创建实例成功 --init--> 完成初始化 ---> 响应客户请求
--destroy--> 资源回收完成 ----> 实例被销毁
------------ Servlet 生命周期 ----------------
load-on-startup: 通常Web启动时立即创建的Servlet。
配置 load-on-startup 的Servlet 有两种方式:
1、web.xml 文件通过<servlet></servlet>中的配置一个
<load-on-startup>子元素进行配置。
2、通过注解方式@WebServlet 指定属性load-on-startup.