一、jsp:
- 概念:HTML代码和java代码能共同存在,JSP文件的扩展名为.jsp
- 特点:跨平台、业务代码相分离、组建重用(复用JavaBean)、预编译(jsp编译一次,下次再访问不再编译)
- jsp的执行流程:jsp底层就是一个servlet,jsp最终会被翻译成.java文件
文件地址:C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\你的项目名\work\Catalina\localhost\你的model名\org\apache\jsp
- jsp的语法:
- 注释:
<%-- jsp注释 --%>
//不会出现在源码上 - 脚本片段:
<% Java代码片段 %>
//嵌入java代码`
- 脚本声明:
<%! 书写Java代码 %>
//脚本声明书写的java代码会翻译在类的成员位置上 - 脚本表达式:
<%= 表达式 %>
//out.print(表达式); ,代替response向页面输出内容
- 使用脚本片段向request、session、servletcontext域中存入值:
<%
request.setAttribute("username","张三");
request.getSession().setAttribute("username","李四");
//session.setAttribute("username","李四");
request.getSession().getServletContext().setAttribute("username","王五");
//application.setAttribute("username","王五");
%>
二、EL表达式(主要用来替代脚本表达式)
- EL表达式的格式:
${表达式内容}
- EL表达式的作用:主要是从域对象中查找指定的数据
- 从指定容器中获取简单数据:
- 从request容器中获取数据:
${requestScope.key}
- 从session容器中获取数据:
${sessionScope.key}
- 从servletContext容器中获取数据:
${applicationScope.key}
- 获取和解析复杂数据(数组、集合(list,map)、JaveBean)
- 获取数组数据:
${ arr[0] }
- 获取集合
- 获取list集合:
${list}
- 获取list结合某一个数据:
${list[0]}
- 获取map集合:
${map}
- 获取map集合某一数据:
${map.name}
//获取key为name的值 - 获取map集合特殊key数据:
${map["a.b.c"]}
// a.b.c是key
- 注意:map中的key尽量不要由".“和使用”.“可以获取的数据,使用”[]"也可以获取
- 获取JavaBean
- 获取JavaBean数据:
${p}
- 获取JavaBean指定属性的数据:
${p.name} ${p.age}
- 使用中括号,获取JavaBean指定属性的数据:
${p["name"]} ${p["age"]}
- 算术运算符:
${ 3 + 4 } //7
${ 3 - 4 } //-1
${ 3 * 4 } //12
${ 3 / 4 } //0.75
${ 3 % 4 } //3
${ 3 + 4 + "5"} //7
${ 3 + 4 + a } //7
//注意:数字执行运算,默认将所有数据转换成Long类型,如果一个数不存在,该数不参与运算,并且继续执行。
- 逻辑运算符:
- 比较运算符:
- empty运算符:
- 概述:是用来判断当前获取的数据是否为空或者当前获取的集合是否没有任何数据
<%
request.setAttribute("str",null);
request.setAttribute("list",new ArrayList<>());
%>
${empty str}<br/> // true
${empty list}<br/> // true
//注意:empty运算符可以和逻辑运算符组合使用 ${not empty list}
- 三元运算符:
${str == “aa” ? "是" : "否"} // 否
三、JSTL(主要用来替代脚本片段)
- 导入jar包
- 主要使用的:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 主要使用的标签:
<c:if></c:if> 和 <c:forEach></c:forEach>
- <c:if></c:if>:
<c:if test="判断条件">
判断为true的时候,这里的内容会生效
</c:if>
- <c:forEach></c:forEach>:
- 普通for循环语法:
<c:forEach var="变量名" begin="起始值" end="结束值" step="步长,每次循环加几">
${变量名}
</c:forEach>
- 增强for循环语法:
<c:forEach items="被循环遍历的对象" var="变量名" varStatus="状态变量">
${变量名},
当前索引:${状态变量.index},
当前序号:${状态变量.count},
是否第1个:${状态变量.first},
是否最后1个:${状态变量.last},
</c:forEach>
//注意:var的值被保存在pageContext容器中