一 注释
1.显式注释
客户端可以看到的注释
继承HTML风格的注释 <!-- html注释 --> <!-- 这是html的注释 -->
2.隐式注释
客户端无法看到的注释
(1)、JSP自己的注释 <%-- jsp注释 --%> <%-- 这是jsp的注释 --%>
(2)、继承Java风格注释 // 单行注释 /*多行注释*/
二 JSP指令标签
page指令
language:支持的语言,目前只有java
contentType:响应类型及编码格式
pageEncoding:字符编码
import:导包,只有该属性可以同时设置多次
errorPage:当页面报错时要跳转的页面,一般与isErrorPage属性一起使用,且跳转的页面的isErrorPage属性设置为true
isErrorPage:是否是处理错误的页面,默认是false。一般与errorPage属性一起使用
注:页面的编码以charset的值为准;若charset未设置,则以pageEncoding为准;若两者都未设置,则使用默认编码ISO-8859-1
三 include静态包含(重点)
格式:<%@include file="文件路径" %> 相对路径
file属性支持表达式去取值
特点:
只会生成一个源码文件,相当于直接将内容拷贝进来,所以不能有同名变量。
运行效率高一点点。耦合性较高,不够灵活。
<div style="height: 800px;width:800px">
<div id="left" style="width: 200px;height:800px;background-color: pink;float: left;">
<%@include file="left.jsp" %>
</div>
<div id="right" style="width: 600px;height:800px;background-color: gray;float: left;">
<%@include file="right.jsp" %>
</div>
</div>
四 include动态包含(重点)
语法:<jsp:include page="要包含的文件路径"></jsp:include>
page属性支持表达式去取值
特点:
生成多个源码文件,相当于方法的调用,可以有同名变量。
耦合度低,比较灵活,效率高。
注:
1、<jsp:include>双标签之间不能有任何内容(除非有参数)
Expecting "jsp:param" standard action with "name" and "value" attributes
2、动态包含可以传递参数
<jsp:param name="参数名" value="参数值"/>
获取参数使用:request.getParameter(name)
value属性支持表达式,name属性不支持
The name attribute of the jsp:param standard action does not accept any expressions
<div style="height: 800px;width:800px">
<div id="left" style="width: 200px;height:800px;background-color: blue;float: left;">
<jsp:include page="left.jsp"></jsp:include>
<jsp:include page="left.jsp">
<jsp:param value="<%=val %>" name="uname"/>
</jsp:include>
</div>
<div id="right" style="width: 600px;height:800px;background-color: green;float: left;">
<jsp:include page="right.jsp"></jsp:include>
</div>
</div>
五 九大内置对象
// 四大域对象
pageContext.setAttribute("uname1", "zhanggsan");
//request
// session
// application
// 两个输出对象
// out
// response
// 配置对象
// config
// 当前页面对象
//page
// 异常对象 主要当前页面设置了isErrorPage="true"时才能使用
// exception
六 EL表达式
语法:${key } key代表的是存在域对象中的键
注意:el表达式一般操作的是域对象,无法操作变量
取值范围:
从小范围到大范围取,取到为止,若未取到,则一直向大返回查找;若四个范围都未获取到,返回空字符串。
获取指定范围的值:
pageScope、requestScope、sessionScope、applicationScope
pageContext, request, session, application;范围依次是,本页面,一次请求, 一次会话,整个应用程序。
而 EL 默认的查找方式为 从小到大查找,找到即可。当域对象全 找完了还未找到则返回空字符串””。
EL操作对象
获取对象中的属性:${对象.属性名}
注:属性必须提供get和set方法
// 设置域对象的值
pageContext.setAttribute("uname", "zhangsan");
request.setAttribute("uname", "lisi");
session.setAttribute("uname", "wangwu");
application.setAttribute("uname", "zhaoliu");
String str = "admin";
// 将对象存到域对象中
User user = new User();
user.setUserId(1);
user.setUserName("Lisa");
user.setUserPwd("123123");
request.setAttribute("user", user);
// 将集合存到域对象中
User user2 = new User();
user2.setUserId(2);
user2.setUserName("Lily");
user2.setUserPwd("123456");
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
List<User> userList = new ArrayList<>();
userList.add(user);
userList.add(user2);
List<String> list2 = new ArrayList<>();
List<String> list3 = null;
request.setAttribute("mylist", list);
request.setAttribute("userList", userList);
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);
Map map = new HashMap();
map.put("aaa", "111");
map.put("bbb", 2222);
map.put("ccc-a", 333);
request.setAttribute("map", map);
request.setAttribute("num", 10);
request.setAttribute("num2", 2);
request.setAttribute("str1", "aa");
request.setAttribute("str2", "bb");
pageContext.setAttribute("a", "aa", PageContext.REQUEST_SCOPE);
pageContext.getAttribute("a", PageContext.REQUEST_SCOPE);
<h2>EL的基本使用</h2>
uname:${uname } <br>
uname1: ${uname1 }<br>
requestScope:${requestScope.uname } <br>
str:${str }<br>
<br><br>
<h2>EL 对象取值</h2>
user对象:${user }<br>
获取user对象中的属性:${user.userName }<br>
<h2>EL 集合取值</h2>
获取集合:${mylist } ---- ${userList }<br>
获取指定下标的值: ${mylist[0] } ---- ${userList[0].userPwd }<br>
获取集合的长度:${userList.size() }
<h2>判断为空empty</h2>
判断字符串是否为空:${empty uname } --- ${empty uname1 } --- ${!empty uname }<br>
判断对象是否为空:${empty user }<br>
判断集合是否为空:${empty userList } --- ${empty list2 } --- ${empty list3 }<br>
<h2>EL Map取值</h2>
获取Map的值:${map }<br>
获取指定key的value:${map.aaa } --- ${map["aaa"] }<br>
<h2>EL 运算</h2>
${1+1 } -- ${num+1 } -- ${num + num2 } <br>
${num / num2 } ---
<%-- ${num div num2 } --%>
<br>
<h2>EL 比较</h2>
${num == 1 } -- ${num >= 10 } <br>
${str1 == str2 } -- ${str1 eq str2 }<br>
${num + 10 > 10 }