介绍:
JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
指令
<%@ 指令内容 %>
page 指令
<%@ page contentType="text/html;charset=UTF-8" language="java" session="false"%>
contentType
其实即使说这个文件是什么类型,告诉浏览器我是什么内容类型,以及使用什么编码
language
表明 jsp 页面中可以写 java 代码
pageEncoding
jsp 内容编码extends
用于指定 jsp 翻译成 java 文件后,继承的父类是谁,一般不用改。import
导包使用的,一般不用手写。session
值可选的有 true | false .
用于控制在这个 jsp 页面里面,能否直接使用 session 对象。
具体的区别是: 如果该值是 true , 那么在代码里面会有 getSession()的调用
如果是 false : 那么就不会有该方法调用,也就是没有 session 对象了。在页面上自然也就不能使用 session 了。errorPage
指的是发生错误时要跳转的的页面, 值需要给错误的页面路径
isErrorPage
上面的 errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个 isErroPage , 就是声明某一个页面到底是不是错误的页面。
include (静态包含)
将被包含的文件的源码加入到了本 JSP 程序中,然后再进行编译。
设置引入的 jsp 页面,必须写相对路径
- 逻辑: 把另外一个页面的所有内容拿过来一起编译运行输出。 所有的标签元素都包含进来。
taglib
<%@ taglib prefix="" uri=""%>
- uri: 标签库路径
- prefix : 标签库的别名
jsp 动作 (动态) 标签
<jsp:include page=""></jsp:include>
(include 动态包含)
include 行为用于运行时包含某个文件,如果被包含的文件为 JSP 程序,则先会执行 JSP 程序,然后在把执行的结果包含进来。
- 这是在本页面中引入”other.jsp“这个页面的执行结果
<jsp:include page="other.jsp"></jsp:include>
<jsp:forward page=""></jsp:forward>
实现请求转发功能 (可带参数)
page
: 需要跳转到的页面或者 servlet 请求路径<jsp:param name="*" value="*"/>
参数行为,带一些参数过去,name & value
是以键值对的形式带过去的
include 指令和 include 行为的区别?
它们俩的作用相同,区别在于:
- include 指令 (include file) 是将被包含的文件的源码加入到了本 JSP 程序中,然后在进行编译,属于静态包含,
- 而 include 行为 (include page) 只是将被包含的文件的运行结果包含进自己。属于动态包含。
### JSP 内置对象
内置对象就是我们可以直接在 JSP 页面中使用这些对象,不用创建- request:HttpServletRequest 的对象 *
- response:HttpServletResponse 的对象 *
- session:HttpSession 的对象 *
- application:代表当前应用 是 ServletContext 的对象 *
- pageContext:页面的上下文。可以获取其他的对象
- config:jsp 对的 servlet 对应 ServletConfig 的对象
- out:JspWrite 对象。out.print() 将字符串直接打印在浏览器
- page:指当前 jsp 对应 servlet 的对象引用
exception:必须在 jsp 声明一个指令
---
JSP 作用域对象
作用域
表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute
四大作用域:(从上到下作用域范围依次是从小到大)
pageContext 【PageContext】
作用域仅限于当前的页面。它还可以获取到其他八个内置对象。
request 【HttpServletRequest】
作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。
session 【HttpSession】
作用域限于一次会话(多次请求与响应) 当中。
application 【ServletContext】
整个工程都可以访问, 服务器关闭后就不能访问了。
使用作用域来存储数据:
### EL 表达式
为了简化 jsp 代码,具体一点就是为了简化在 jsp 里面写的 java 代码。
写法格式
${表达式}
EL 表达式的
.
或者[]
的作用:获取域中对象的属性值,若属性值含有特殊的字符,则可以使用[]
- 如果从作用域中取值,会由小到大,如果没有,就往下一个作用域取。若四个作用域取完都没有,就无显示。
- EL 表达式可以自动类型转化,也可以进行简单的算术运算
- EL 表达式判断某个值是否为空:
${empty *}
例如:${!empty list}
//list非空
一般使用 EL 表达式,用的比较多的,都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。
如何使用
- 取出 4 个作用域中存放的值。
- 如果域中所存的是数组
如果域中所存的是集合
取出 Map 集合的值
取值细节
从域中取值, 得先存值。
- 取值方式
如果这份值是有下标的,那么直接使用 []
如果没有下标, 直接使用 . 的方式去取
EL 表达式 的 11 个内置对象。
${对象名. 成员}
- pageContext
作用域相关对象 - pageScope
- requestScope
- sessionScope
- applicationScope
头信息相关对象
- header
- headerValues
参数信息相关对象
- param
- paramValues
- cookie
全局初始化参数 - initParam
JSTL
全称 : JSP Standard Tag Library jsp 标准标签库
简化 jsp 的代码编写。 替换 <%%> 写法。 一般与 EL 表达式配合
怎么使用
- 导入 jar 包 (jstl.jar && standard.jar) 并添加进工程。
- 在 jsp 页面上,使用 taglib 指令,来引入标签库
- 注意: 如果想支持 EL 表达式,那么引入的标签库必须选择 1.1 的版本,1.0 的版本不支持 EL 表达式。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用基础
常用标签
<c:out value="${*}"></c:out>
<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>
c:out :获取域中的属性值,并且对打印到页面的特殊字符进行转换
c:set
c:if
判断 test 里面的表达式是否满足,如果满足,就执行 c:if 标签中的输出 , c:if 是没有 else 的。
c:forEach
总结:
在我们开发中,经常要用到的 6 个行为是: