前提
: 为了弥补在 Java 中书写 HTML 标签该问题而出现的;
JSP 概述
: Servlet 是 JavaEE 提供的动态资源开发技术,是以 Java程序 的形式进行开发,在Java中 书写HTML标签 是一件十分头疼的事情,所以人们开发出了 JSP(全称:Java Server Pages)。 看起来像是 HTML 一样,但可以在其中书写 Java 代码,本质上是 动态web 资源,JSP 会在第一次访问时被容器翻译成 Servlet。
生命周期
1.编译阶段
: servlet容器编译servlet源文件,生成servlet类
初始化阶段
: 加载域 JSP 对应的 servlet类,创建其实例,并调用他的初始化方法;
执行阶段
: 调用域JSP 对应的 servlet 实例的服务方法
销毁阶段
: 调用与 JSP 对应的 servlet实例的销毁方法,然后销毁servlet实例;
JSP - - - Servlet
: 在 jsp 翻译成 Servlet 时,jsp翻译引擎 在翻译过来的 Servlet 中,预先定义了一些变量,可以不需要在 JSP 中预先定义就可以直接使用,共有9个,这个九个称为 JSP 的九大隐式对象。
九大隐式对象: page config application response request session out exception pageContext 注意: out 与 response.getwriter().write(); 两者如果一起使用的话,会出现顺序错乱;
Out 对象
:可以将它理解成 response.getWriter() 获得的PrintWriter;
:他自带一个缓冲区,其大小受 page 指令中的 buffer 的设定限制;
:当 缓冲区满 或 缓冲区被关闭 或者 jsp 页面结束;
:则此缓冲区中的内容将被刷新到 response,getWriter()的缓冲区中;
pageContext 对象
作用的范围 : 整个 jsp 页面,是四大作用域中最小的一个;
生命周期 : 在 jsp 页面范围内共享数据;
特殊作用 :可以去操作其他三个作用域;
操作所有域中属性的方法: getAttribute(String name,int scope); setAttribute(String name,object value,int scope); removeAttribute(String name,int scope); 其中 pageContext 中代表域的常量: PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.RESPONSE_SCOPE findAttribute()方法: 在四大域中搜寻属性, 搜寻的顺序是 page域,request域,session域,application域, 从小域到大域开始搜索,如果搜索到就直接获取该值, 如果所有域中都找不到,返回一个null;
举例(获取其他作用域的值)
<% pageContext.setAttribute(“city”,"北京"); request.setAttribute("city","济南"); session.setAttribute("city","太原"); application.setAttibute("city","石家庄"); %> city=<%=pageContext.getAttribute("city") %><br> request.city= <%= pageContext.getAttribute("city",PageContext.REQUEST_SCOPE) %><br> session.city= <%= pageContext.getAttribute("city",PageContext.SESSION_SCOPE) %><br> application.city= <%= pageContext.getAttribute("city","PageContext.REQUEST_SCOPE") %>
实现请求的转发和包含
转发: <% pageContext.forward("/_index.jsp"); //request.getRequestDispatcher().forwart(request.response); %> 包含: <% pageContext.include("/_head.jsp"); %> <% pageContext.include("/_foot"); %>