1.JSP是一种动态页面技术,主要目的是将表示逻辑从Servlet中分离出来,实现表示逻辑(即更好的表示界面)。
2.JSP页面元素
JSP页面元素 | 简要说明 | 标签语法 |
声明 | 定义变量和声明方法 | <%! Java声明 %> |
小脚本 | 执行业务逻辑的Java语言 | <% Java代码 %> |
表达式 | 用于在JSP页面输出表达式的值 | <%=表达式 %> |
指令 | 指定转换时容器发出的指令 | <%@指令 %> |
动作 | 向容器提供请求时的指令 | <jsp:动作名 /> |
EL表达式 | 表达式语言 | ${applicationScope.email} |
注释 | 用于文档注释 | <%-- 任何文本--%> |
模板文本 | HTML标签和文本 | 同HTML规则 |
3.三种脚本元素:声明、小脚本、表达式
JSP声明:<%!LocalData date=null; %>//声明语句必须以分号结束
声明的变量仅在页面第一次载入时由容器初始化一次,初始化后在后面请求中一直保持改值
小脚本:嵌套在JSP页面的Java代码段,小脚本在每次访问页面时都被执行,
eg:<% date=LocalDate.now();%>因此每次请求时都会返回当前日期
由于是java代码段,因此语句结束必须以分号结束。
JSP表达式:在页面每次被访问时都会进行表达式计算,表达式不能以分号结束
JSP指令:有关于JSP页面的总体信息,指令有三种:page、include、taglib指令
page | 通知容器有关于JSP页面的总体特性 |
include | 实现把另外一个文件(HTML、JSP等)的内容包含到当前页面中 |
taglib | 用来指定在JSO页面中使用标准标签或自定义标签的前缀与标签库的URI |
(属性值必须使用一对单引号或双引号括起来;在“=”与值之间不能有空格)
JSP动作:页面发送给容器的命令,指示容器在页面执行期间完成某种任务。
常见的JSP动作:
jsp:include | 在当前页面中包含另外一个页面的输出 |
jsp:forward | 将请求转发到指定的页面 |
jsp:useBean | 查找或创建一个JavaBeans对象 |
jsp:setProperty | 设置JavaBeans对象的属性值 |
jsp:getProperty | 返回JavaBeans对象的属性值 |
jsp:plugin | 在JSP页面中嵌入一个插件 |
4.JSP页面生命周期:
JSP页面从结构上看与HTML页面类似,但实际上是作为Servlet运行
JSP页面实现类:JSP页面第一次被访问时,将进行扫描,Web容器将会将其转化为相应的Java文件,该文件声明了一个Servlet类,称之为页面实现类。
JSP页面执行过程:(JSP扫描转化为Java文件,编译找出页面实现类,根据页面实现类对其进行初始化、提供服务和销毁服务)
5.JSP九大隐含变量:(可在JSP页面脚本直接调用,无需定义)
application | 引用Web应用程序上下文 |
session | 引用用户会话 |
request | 引用页面当前请求对象 |
response | 用来向客户发送一个响应 |
out | 引用页面输出流 |
page | 引用页面的Servlet实例 |
pageContext | 引用页面的上下文实例 |
config | 引用Servlet的配置对象 |
exception | 用来处理错误 |
request与response变量:与其在Servlet中使用一致,即分析请求和发送响应。
out变量:使用print()和println()完成输出
application变量:使用其getAttriute()方法检索存储在上下文的数据
session变量:在JSP页面中表示HTTP会话对象。
exception变量:用作其他页面的错误处理器
config变量;*
pageContext变量:PageContext类,存储隐含对象的引用;提供不同作用域内返回或设置属性的方法;提供forword()和include()实现将请求转发到另外一个资源和将一个资源输出包含到当前页面的功能。
page变量:
6.page指令属性:
import | 导入到JSP页面使用的Java类和接口 |
pageEncoding | 指定JSP文件的字符编码 |
language | 指定容器支持的脚本语言(默认Java) |
session | 指定JSP页面是否加入HTTP会话 |
7.JSP组件包含
静态包含:include指令 | 在JSP页面转换阶段将另外一个文件的内容包含到当前JSP页面 | <%@ include file="被包含的文件"> |
动态包含:include动作 | 请求时将另外一个页面的输出包含到当前主页面的输出 | <jsp:include page="relativeURL(相对URL)" flush="true|false"> |
<jsp:forword>动作 | 将请求转发到组件,然后由转发到组件把响应发送到客户 | <jsp:forword page="相对URL">(在MVC设计模式之中,控制逻辑应该由控制器是实现) |
8.四大作用域对象:所有隐含变量以及用户定义的对象都处于这四种作用域之一,这些作用域定义了对象存在性和从JSP页面和Servlet中的可访问性(从上到下作用域范围依次减小)
应用作用域 | application | 在整个Web应用程序中有效 |
会话作用域 | session | 在一个用户会话范围之中有效 |
请求作用域 | request | 在用户的请求和转发的请求之中有效 |
页面作用域 | pageContext | 只在当前页面之中有效 |
9.JavaBeans是Java平台的组件技术,在Java Web中常用JavaBeans来实现存放数据、封装业务逻辑等,从而实现业务逻辑,和表示逻辑的分离。
JavaBeans最大的好处是实现了代码的重用,使得程序更加易维护
JavaBeans是使用Java语言定义的类,需满足以下三个要求
1)JavaBeans应该是public类,并且具有无参数的public构造方法
2)JavaBeans类的成员变量一般称作属性,每个属性的访问权限一般被定义为private而不是public,属性名必须以小写字母开头
3)每个属性一般定义两个方法,一个是访问方法(getter)另外一个是修改方法(setter),使用它们来访问和修改JavaBeans的属性值
eg:JavaBeans类中有一个String类型的color属性,访问方法和定义方法如下:
//访问方法
public String getcolor{
return this.color:
}
//修改方法
public String setcolor{
this.color=color;
}
属性为布尔类型时,访问方法应该定义为isXxx()
public boolean isVald(){
return this.isVald;
}
*JavaBeans与EJB(企业JavaBeans)并不一样,后者属于Java EE应用中的组件技术。
10.JSP页面中使用JavaBeans
三个动作来实现:
<jsp:useBean>动作:用来在指定的作用域中查找或创建一个bean实例,
属性说明:id:标识bean实例;scope:bean的作用域范围(默认为page);class指定创建bean实例的Java类(实现类,如果该类属于某个包,则必须指定类的全名,如com.demo.Customer)
<jsp:setProperty>动作:
<jsp:getProperty>动作
11.MVC设计模式
Web组件分为模型(Model)、视图(View)、控制器(Controller)
一般步骤:
1.定义JavaBeans存储数据,使用JavaBeans对象或者实体类来存放数据。
2.使用Servlet处理请求,使用Servlet或者Filter充当控制器,从请求中读取请求信息、创建JavaBeans对象、执行业务逻辑,最后将请求转发到视图组件(JSP页面)
3.结果与存储:将这些对象存储在JSP页面能够访问到的地方,在Web中主要可以在以下三个位置存储JSP页面所需数据,分别为HttpServletRequest对象、HttpSession对象和ServletContext对象
4.转发请求到JSP页面,在使用请求作用于共享数据时,应该使用RequestDispatcher对象的forword()方法将请求转发到JSP页面;在使用会话作用域共享数据时,应该是响应对象的sendRedirect()方法
5.从JavaBeans对象中提取数据
12.错误处理: