何为 JSP
java server pages Java 的服务器页面
主要作用是代替 Servlet 程序回传 html 页面的数据
jsp 页面和 html 页面一样,都是存放在 web 目录下。访问也跟访问 html 页面一样
http://ip:port/工程路径/b.jsp
JSP本质
jsp 页面本质上是一个 Servlet 程序(HttpJspBase 类直接地继承 HttpServlet 类)
底层通过输出流把 html 页面数据回传给客户端
<%
属性
language: 表示 jsp 翻译后是什么语言文件。暂时只支持 java。
contentType: 表示 jsp 返回的数据类型,是源码中 response.setContentType()参数值
pageEncoding: 表示当前 jsp 页面文件本身的字符集。
import: 用于导包,导类
errorPage:设置当 jsp 页面运行时出错,自动跳转去的错误页面路径 /
isErrorPage:设置当前 jsp 页面是否是错误信息页面,默认false。true可以获取异常信息
session:设置访问当前 jsp 页面是否创建 HttpSession 对象。默认是 true。
extends:设置 jsp 翻译出来的 java 类的默认继承
out 输出流属性
autoFlush:设置out 输出流缓冲区满后,是否自动刷新,默认值true
buffer:设置 out 缓冲区大小,默认8kb
1.声明脚本:不常用
<%! 声明java代码 %>
给 jsp 翻译出来的 java 类定义属性和方法甚至是静态代码块、内部类等
直接在中间写类属性
2.表达式脚本
<%=表达式%>
jsp 页面上输出数据
特点:
所有的表达式脚本都会被翻译到_jspService()方法中
表达式脚本都会被翻译成 out.print()输出到页面上
表达式脚本翻译的_jspService()方法中的对象都可以直接使用。
表达式不能以分号结束
3.代码脚本
<% java语句 %>
在 jsp 页面中编写功能(java 语句)
特点:
代码脚本翻译后在_jspService 方法中
代码脚本_jspService()方法中的现有对象可以直接使用
多个代码脚本块组合完成一个完整的 java 语句
代码脚本可以和表达式脚本组合使用,在 jsp 页面上输出数据
4.注释
html 注释 <!-- 这是 html 注释 -->
html 注释会被翻译到 java 源代码中。在_jspService 方法里,以 out.writer 输出到客户端
java 注释
jsp 注释 <%-- 这是 jsp 注释 --%>
jsp 中的内置对象,是指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象
request 请求对象
response 响应对象
pageContext jsp的上下文对象
session 会话对象
application ServletContext对象
config ServletConfig对象
out jsp输出流对象
page 指向当前jsp对象
exception 异常对象
pageContext(PageContextImpl 类) 当前 jsp 页面范围内有效
request (HttpServletRequest 类) 一次请求内有效
session (HttpSession 类) 一个会话范围内有效
(打开浏览器访问服务器,直到关闭浏览器)
application (ServletContext 类) 整个 web 工程范围内都有效
(只要 web 工程不停止,数据都在)
域对象是可以像 Map 一样存取数据的对象
四个域对象功能一样,不同的是数据的存取范围
使用的优先顺序从小到大:
pageContext < request < session < application
一般情况在 jsp 页面中统一使用 out 来进行输出
避免打乱页面输出内容的顺序
out.write() 输出字符串
out.print() 输出任意数据
统一使用 out.print()来进行输出
<%@ include file=""%>
file 属性指定包含的 jsp 页面的路径
地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ ,映射到代码的 web 目录
特点:
静态包含不会翻译包含的 jsp 页面
静态包含是把包含的 jsp 页面代码拷贝到包含的位置执行输出(通用的固定内容)
<jsp:include page="/include/footer.jsp">
<jsp:param name="username" value="bbj"/>
</jsp:include >
page 属性是指定你要包含的 jsp 页面的路径
包含的内容执行输出到包含位置
特点:
动态包含会把包含的 jsp 页面也翻译成为 java 代码
动态包含底层调用被包含的 jsp 页面执行输出:
JspRuntimeLibrary.include(request, response, "/include/footer.jsp", out, false);
动态包含可以传递参数
<jsp:forward page="/scope2.jsp"></jsp:forward >
请求转发标签,它的功能就是请求转发
page 属性设置请求转发的路径
Expression Language 表达式语言
代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出
EL 表达式的格式是:${表达式}
输出 null 值的时候,输出的是空串
主要是输出域对象中的数据:相同的 key,按照四个域的从小到大的顺序去进行搜索
输出 Bean 属性:
运算 ${ 运算表达式 }
关系、逻辑、算术
empty运算:判断一个数据是否为空,输出 true
值为 null 值的时候,为空
值为空串的时候,为空
值是 Object 类型数组,长度为零的时候
list 集合,元素个数为零
map 集合,元素个数为零
三元运算:表达式 1?表达式 2:表达式 3
如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值
. 点运算:输出 Bean 对象中某个属性
[]中括号运算:输出有序集合中某个元素的值;还可以输出 map 集合中 key 里含有特殊字符的 key 的值
隐含对象
可以直接使用
变量 类型 作用
pageContext PageContextImpl 获取 jsp 中的九大内置对象
pageScope Map<String,Object> 获取 pageContext 域中的数据
requestScope Map<String,Object> 获取 Request 域中的数据
sessionScope Map<String,Object> 获取 Session 域中的数据
applicationScope Map<String,Object> 获取 ServletContext 域中的数据
param Map<String,String> 获取请求参数的值
paramValues Map<String,String[]> 获取请求参数的值,获取多个值的时候使用。
header Map<String,String> 获取请求头的信息
headerValues Map<String,String[]> 获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 获取当前请求的 Cookie 信息
initParam Map<String,String> 获取web.xml<context-param>上下文参数
获取四个特定域中的属性
pageScope pageContext 域
requestScope Request 域
sessionScope Session 域
applicationScope ServletContext 域
pageContext 对象
1.协议: ${ pageContext.request.scheme }
2.服务器 ip:${ pageContext.request.serverName }
3.服务器端口:${ pageContext.request.serverPort }
4.获取工程路径:${ pageContext.request.contextPath }
5.获取请求方法:${ pageContext.request.method }
6.获取客户端 ip 地址:${ pageContext.request.remoteHost }
7.获取会话的 id 编号:${ pageContext.session.id }
JSP 标准标签库
功能范围 URI 前缀
核心标签库--重点 http://java.sun.com/jsp/jstl/core c
格式化 http://java.sun.com/jsp/jstl/fmt fmt
函数 http://java.sun.com/jsp/jstl/functions fn
数据库(不使用) http://java.sun.com/jsp/jstl/sql sql
XML(不使用) http://java.sun.com/jsp/jstl/xml x
使用:
先导入 jstl 标签库的 jar 包
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
taglib 指令引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
core 核心库
1.<c:set />往域中保存数据
<c:set scope="session" var="abc" value="abcValue"/>
scope 属性设置保存域
page : PageContext 域(默认值)
request : Request 域
session : Session 域
application : ServletContext 域
var 属性设置 key
value 属性设置值
2.<c:if />
<c:if test=EL 表达式> 内容 < /c:if>
test 属性表示判断的条件(使用 EL 表达式输出)
3.< c:choose> 多路判断
< c:when>每一种判断情况</c:when >
< c:otherwise>剩下的情况</c:otherwise >
</c:choose >
要使用 jsp 注释
4.<c:forEach />遍历输出
<c:forEach begin="1" end="10" var="i"> 内容 < /c:forEach>
begin 开始的索引
end 结束的索引
var 循环变量(当前正在遍历的数据)
items 遍历的数据源(集合)
step 遍历的步长
varStatus 当前遍历到的数据的状态
原文:https://www.cnblogs.com/fremontxutheultimate/p/14737982.html