一.JSP
1.什么是jsp
用户角度:就是一个网页()
程序员角度:就是一个java类,继承了servlet
实质:html中内嵌了java代码
2.为什么有jsp
html提供静态的内容,不能满足网页动态的需求,
为了提升了用户体验,增加了客户端和服务器的交互性。
3.jsp三大编译指令
在jsp编译成servlet时起作用。
指令写法<%@ 指令名字 %>
(1)page 指令
- language
表明jsp页面可以使用的语言
- contentType
表明文件是什么类型以及用什么编码(是服务器告诉浏览器)
contentType=“text/html;charset=utf-8”
说明:MIME(Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展类型,用于设定某种扩展名文件以特定的应用打开==
如:text/html 表明这是一个文本文件,用html打开
video/mp4 表明这是一个视频文件,用mp4格式打开
- pageEncoding
JSP内容的编码
- extends
用于指定jsp转换成java文件后,继承的父类,默认是httpJspBase,一般不修改
- import
用来导包
- session
用于表示在这个页面能否直接使用session对象
只有两个值,true或者false
ture代表可以直接在jsp中直接使用session,jsp转换的java源码中有getSession()获取的session对象的代码。
false则代表不能直接使用,jsp转换的java代码中没有获取session对象的代码
- errorPage isErrorPage
errorPage 其值为转向出错页面的路径
当页面出错时,转向指定出错页面isErrorPage 其值为true或者false
用来声明这个页面是否为出错页面
(2)include 指令
<%@ include file = “网页路径” %>
作用:包含另外一个jsp页面
- 背后的细节
将被包含的页面的所有内容都放到包含页面的转换成的java代码中。
(3)taglib
<%@ taglib prefix=" " uri=" "%>
uri: 标签库路径
prefix: 标签库别名
4.jsp动作指令
运行时的动作
- <jsp: include page=" "></jsp:include>
包含指定的页面, 这里是动态包含,也就是不把包含页面的所有元素拿过来,而是把它运行的结果拿过来。
- <jsp: forward page=" "></jsp:forward>
直接跳转到指定页面,原来页面的内容都不显示。等同与以下代码
request.getRequestDispatcher(“跳转页面路径”).forward(request,response);
- <jsp:param value=" " name=" "></jsp:param>
在跳转页面的时候将参数携带过去,需要写在跳转页面标签的里面。
在跳转后页面中,利用requset.getParameter()
来过去传递过来的参数。
5. jsp的九大内置对象
所谓的内置对象就是不用创建就可以使用
pageContext
request
session
application
以上四个是作用域对象
out
exception
page
config
response
- 作用域
表示这些对象可以存值,他们的存值范围有限定。
都是通过setAttribute()存值 使用getAttribute()取值
- 四个作用域的区别
pageContext 类型:PageContext 作用域限制与本页面,通过这个对象可以拿到其他八个对象。
request 类型:HttpRequest 作用域限制与一次请求
session 类型:HttpSession 作用域限制域一次会话
application 类型 :servletContext 整个工程都可以访问,服务器关闭后就不能使用了
- out对象 和 response对象
out 类型:JspWriter
response 类型:HttpServletResponse
输出结果并没有按照代码的顺序显示。
这是因为out对象最终还是依靠response对象来进行输出。因此,response先输出自己的内容,然后再输出out对象要输出的内容。
- exception对象 page对象 与config对象
exception 类型:Throwable
page 类型:Object 其实就是这个jsp页面翻译成java类的实例
config 类型:ServletConfig
二. EL表达式
为了简化jsp中java的代码
- 写法格式
${ 表达式 }
从指定域中取值
${ pageScope.name}
${ requestScope.name}
${sessionScope.name}
${applicationScope.name }
name为在域中存储的key值
如果直接用${ name }
,按照作用域对象由作用域有小到大找name对应的值
- 取值方式
(1)如果值有下标,直接用 名字[]取值
(2)如果没有下标,直接使用 . 的 方式来取值
- EL对象的11个内置对象
pageScope
requestScope
sessionScope
applicationScopeheader 请求头信息
headerValues
param 请求携带的参数
params
cookie
initparam
pageContext
三. JSTL
- 定义
jsp standard tag library jsp标准标签库
作用:简化jsp代码的编写,替换<% %>写法,一般于EL表达式配合
- 用法
(1) 导入jar文件到工程webContent/Web-inf/lib jstl.jar standard.jar
(2) jsp页面使用taglib指令,引入标签库
(3) 如果想支持 EL 表达式,那么引入的 标签库必须选择1.1版本
- 常用标签
<c:set> </c:set>
<c:if > </c:if>
当满足if里面的语句时,将会执行这个标签中的语句
<c:foreach begin=" " end=" "></c:foreach>