servlet缺陷:编码、部署和调试任务繁琐;生成动态网页繁琐,不利于项目分工
jsp HTML模板+java代码;所以的java语言都可以在jsp中使用。
html定义了整个网页的骨架,页面的结构和外观,java代码用来操作数据的显示。
jsp声明
<%!
声明内容
%>
可以声明变量、函数、静态块;jsp的声明主要定义全局的变量方法。
jspAPI
jsp翻译为java代码_jsp.java。_jsp继承了HttpJspBase,HttpJspBase继承了HttpServlet。
jsp和servlet同异:
两个都是servlet,都是服务器端动态网页技术;
jsp重在数据显示,servlet主要处理业务逻辑。
jsp的脚本片段
<%
java代码
%>
,所有的java代码都放在service方法里,可以调用外部属性和方法;
脚本片段里只能出现java代码,不能出现任何模板元素。jsp引擎在翻译jsp代码的时候,会将脚本片段里面的所以java代码放在service里
在脚本片段里面要嵌套模板元素,需要把脚本片段分开。
脚本表达式
输出内容
<%=
内容
%>
=
<%
out.print(内容)
%>
JSP生命周期:
由JSP引擎翻译(jsp->java),编译(java->class),加载,实例化(new),初始化(init),调用service方法,销毁(destroy)
JSP指令-------提供整个JSP页面的相关信息;用于JSP页面与容器之间通信。
1、page:用于定义jsp页面的各种属性,无论page指令出现在jsp哪个地方,都作用于整个页面。
<%@
page
language
="java"
import
="java.util.*"
pageEncoding
="utf-8"
%>
2、include:可以包含文件(包含文件内容);include指令表示引入的文件内容,可以是静态文件,也可以是动态文件。
<%@
include
xxxx
%>静态包含
静态包含:先把其他页面的内容引入到当前这个页面,变成一个页面,最终只会产生一个servlet;包含动态网页时,内容必须遵循jsp语法,被引入的文件可以是任意的扩展名。静态引入会生成一个文件,再翻译成servlet,引入的文件不能有指令冲突。
<%jsp:
include
xxxx
%>静态包含
动态包含:包含的是结果,有多少个动态页面就包含多少个结果。创建多个servlet,将所有servlet结果放一起。如果包含静态文件,就相当于静态包含。
<%jsp:
forword
page=
"xx"
%>跳转到另一个jsp
3、taglib:导入标签库的指令
jsp隐式对象
pageContext:
是jsp技术中最重要的一个对象,代表jsp的运行环境。这个对象封装了其他8个对象。他自身也是一个容器(域对象),用当前这个对象来封装数据;这个对象还包含了一些动作(跳转、引入文件等)。
pageContext通过GetAttribute(String)方法可以获取到其他对象的属性值。
pageContext通过FindAttribute(String)方法可以获取到其他对象的属性值。
FindAttribute(String)方法首先找本身,存在返回值;不存在则继续按照作用范围从小到大的顺序查找其他对象。(page--》request--》session--》application),都找不到则返回null。
pageContext.forword(" ")--->跳转
pageContext.include(" ")--->引入文件
page===》表示当前jsp对象