JSP简介
- java server page
- html模板+java代码。所有的java语言都可以在jsp中使用
- html定义了整个网页的骨架,页面的结构和外观,java代码用来操作数据的显示。
JSP的声明 <%! %>
- 可以声明变量,函数,静态块,jsp的声明主要定义全局的变量方法
JSP API
- test.jsp-翻译为test.java代码。test类继承了HttpJspBase.而HttpJspBase继承了HttpServlet.jsp本质上就是servlet
- tomcat web.xml里面已经配置了jsp的内容。注册和映射都配置好了,tomcat是一个jsp、servlet的容器。
jsp和servlet之间的相同的和不同点:
- 他们两个都是servlet。都是服务器端动态网页的技术
- jsp重在数据的显示,servlet主要处理业务逻辑
JSP的脚本片段---<% %>
- 所有的Java代码都是放在service方法里面,可以调用外部的属性和方法。
- jsp脚本片段里面只能出现Java代码,不能出现任何模板元素,jsp引擎在翻译jsp代码的时候,会将脚本片段里面的所有java代码都放在service方法里面。jsp脚本片段必须完全遵循java语言规则,在一段脚本片段里面要嵌套模板元素时,只能将脚本片段分开
JSP脚本表达式---<%= %>
- 用于将程序的数据输出到客户端,jsp引擎会将脚本表达式转换为out.print out.write
JSP运行机制-页面翻译
- Web容器第一次接受到对某个JSP页面
- Web容器负责将Servlet代码编译为字节码。与源文件放在同一个目录下
JSP生命周期
- 由JSP引擎将JSP页面翻译成JAVA代码
- 将JAV代码编译成class字节码文件
- 加载到容器
JSP指令 <%@ page %>
- page指令为当前页面提供处理指令 ---用于定义jsp页面的各种属性,无论page指令出现在jsp的那个地方,都作用于整个页面。
include指令 <%@ include %>
- 可以包含任意的文件,包含的是内容。include指令用于引入其他的一个文本文件的内容。
- 静态包含:先把其他页面的内容引入到当前的这个页面,变成一个页面。最终只会产生一个servlet,包含的内容必须遵循jsp的语法,被引入的文件可以是任意的扩展名,静态引入会产生一个文件,再翻译成servlet,引入的文件不能有指令冲突。
taglib指令
- 导入标签库的指令
JSP标准动作
- <jsp:include>动态包含:包含的是结果,有多少个动态页面就包含多少个结果。创建多个servlet。将所有servlet结果放在一起。
- 如果包含的是静态的文件,相当于是静态包含。
- 包含的每一个页面都可以设置自己的指令和变量,不会冲突。
- <jsp:forward>:当前执行到派发动作的时候,将控制权交给了下一个资源,就相当于servlet中的请求派发。
JSP隐式对象
- 9大隐式对象可以直接在jsp中使用,不需要定义,jsp引擎已经定义好了
pageContext
- 它是jsp技术中最重要的一个对象,代表jsp页面的运行环境。这个对象封装了其他八个对象,他自身还是一个容器(也是一个域对象),我们可以用它来封装数据,当前这个对象还包含了一些动作。比如跳转、引入文件。
- pageContext包含其他八个对象,可以通过findAttribute获取到其他对象的属性值。
- pageContext.getAttribute()得到的是自己的属性。
- findAttribute:查询内容,首先查找本身这个对象,存在就返回然后结束查找,不存在就继续从其他对象查找。查询其他对象,按照从小到大(表示当前对象作用的范围)的顺序。 page>request>session>application(jsp中的上下文对象) 找不到才返回null。
- page:表示当前jsp页面。可以理解为一个对象本身。就相当于把jsp看成一个对象。