JSP
自用…
一、概述
1. 概念
- JSP:java服务器端页面
- 即可以定义html标签,又可以定义java代码
- 用于简化书写
2. 原理
-
1)JSP本质上是一个Servlet
-
通过查看其生产的文件发现,JSP的父类继承了HttpServlet类,其service方法中写了write()输出html代码
3. JSP脚本
- 1)
<% ...java代码 %>
:定义的java代码在service()方法中。service方法中可以定义什么,该脚本中就可以定义啥 - 2)
<%! ...java代码 %>
:定义的java代码在JSP转换后java类的成员位置。 - 3)
<%= ...java代码 %>
:定义的java代码会输出到页面上。输出语句中可以定义啥,该脚本就可以定义啥
4. JSP内置对象
- 1) JSP内置对象:在JSP页面不需要创建、获取就可以之间用的对象
- 2)JSP一个有9个内置对象
- request
- response
- out:可以将数据输出到页面上(字符输出流)。和
response.getWriter()
类似out
和response.getWriter()
的区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。response.getwriter
()数据输出永远tout.write()
之前
二、指令
1. 概念
- 指令的作用:用于配置JSP页面,导入资源文件
- 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 %>
2. 分类
① page:配置JSP页面
- 1)contentType:等同于response.setContentType()
- 设置响应体的mime类型以及字符集
- 设置当前jsp页面的编码(只能是高级开发工具才能生效。低级工具用pageEncoding属性)
- 2)language
- 3)buffer:缓冲区大小,默认8kb
- 4)import:导包
- 5)errorPage:错误页面。当前页面发生异常后,会自动跳转到指定的错误页面
- 6)isErrorPage:标识当前页面是否是错误页面
- true:可以使用内置对象:exception
- false:默认
② include:页面包含。导入页面资源文件
- file:
<%@ include file="....jsp" %>
③ taglib:导入资源
<%@ taglib prefix = ".." uri="..." %>
- prefix:前缀,自定义的
三、注释
- 1)html注释:
<!-- -->
,只能注释html - 2)jsp注释:
<%-- --%>
,能注释所有
四、内置对象
1. 简介
- 内置对象:在jsp页面中不需要创建,直接使用的对象
2. 分类
变量名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,获取其他八个对象 |
request | HttpServletRequest | 一次请求访问的多个资源 (转发) |
session | HttpSession | 一次会话的多个请求间共享数据 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)对象,this |
out | JspWriter | 输出对象,数据输出到页面 |
config | ServletConfig | servlet的配置对象 |
exception | Throwable | 异常对象 |
五、EL表达式
1. 简介
- 1)EL:Expression Language 表达式语言
- 2)作用:替换和简化jsp页面中java代码的编写
- 3)语法:
${表达式}
- 4)注意
- jsp默认支持EL表达式
- 如果要忽略EL表达式:
- 设置jsp中page的属性
isELIgnored="true"
\${..}
:忽略当前EL表达式
- 设置jsp中page的属性
2. 使用
① 运算
② 获取值
- 1)EL表达式只能从域对象中获取值
- 2)语法:
- ①
${域名称.键名}
:从指定域中获取键的值- 域名称
- pageScope —>pageContext
- requestScope —>request
- sessionScope —>session
- applicationScope —>application(servletContext)
- 域名称
- ②
${键名}
:表示依次从最小的域中查找是否有该键值对得值
- ①
- 3)获取对象、集合的值
- 获取对象的值:
${域名称.键名.xxx}
:xxx为调用对象的getXxx()方法 - List集合:
${域名称.键名[索引]}
- Map集合:
${域名称.键名.key名称}
、${域名称["key名称"]}
- 获取对象的值:
3. 隐式对象
- EL表达式中有11个隐式对象
- pageContext
- 获取jsp其他八个内置对象
${pageContext.request.contextPath}
:动态获取虚拟目录
- 获取jsp其他八个内置对象
六、JSTL标签
1.简介
- JSTL:JavaServer Pages Tag Library。JSP标准标签库
- Apache组织提供的开源免费的jsp标签
- 作用:用于简化和替换jsp页面上的java代码
2. 使用步骤
- 1)导入jstl相关jar包
- 2)引入标签库:taglib指令:
<%@ taglib %>
- 3)使用标签
3. 常用JSTL标签
① if
-
1)属性:
- test:必须写该属性,接受boolean表达式
- 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
- 一般情况下,test属性值会结合el表达式一起使用
-
2)注意:
- c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
<c:if test="true">
我是真的...
</c:if>
② choose
-
1)使用choose标签声明 相当于switch声明
-
2)使用when标签做判断 相当于case
-
3)使用otherwise标签做其他情况的声明 相当于default
<c:choose>
<c:when test="${number == 1}">星期一</c:when>
<c:when test="${number == 2}">星期二</c:when>
...
<c:otherwise>数字输入有误</c:otherwise>
</c:choose>
③ foreach
- 1)foreach:相当于java代码的for语句
- begin
- end
- var:临时变量
- strp:步长
- varStatus:循环状态对象:
- index(容器中元素的索引)
- count(循环次数)
- items:容器对象
<c:forEach begin="1" end="10" var="i" step="1" varStatus="s">
${i} ${s.index} ${s.count}
</c:forEach>
<%-- 遍历容器 --%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}<br>
</c:forEach>
tep=“1” varStatus=“s”>
${i} ${s.index} ${s.count}
</c:forEach>
```jsp
<%-- 遍历容器 --%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}<br>
</c:forEach>