(一)EL的基本语法
1优点
1 jsp的java太长了,el自己的语言${ 开始 }结束
2el直接返回空字符转,而java直接报错
3使用“lt”代替“<”运算符,如果运算符后面是数字,在运算符
*EL取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。
2java请求转发到jsp里
el与jsp对比
- 2RequestDispatcher dispatcher = request
.getRequestDispatcher("/myjsp.jsp"); - request.getRequestDispatcher("/myjsp.jsp") 是一个方法调用,它返回一个 RequestDispatcher 对象,该对象可以用于将请求转发到 "/myjsp.jsp" 这个资源。
3作用域
pageContext..JSP的作用域(request、 session、 application 以及page)EL不仅可以访问一般变量,还可以访问JavaBean中的属性、嵌套属性和集合对象。
4.中括号
如“-”或“?”等非字母或数字的符号,就只能使用中括号运算符访问该属性。中括号运算符的用法示例如下:${user["My-Name"]}
什么时候用:联合使用集合里有多个对象,对象又有属性${users[0].userName}
一般情况可以互换
${student.name}等价于${student["name"]}。
(二)EL中常见的隐式对象
可分为5种
1pageContext ${pageContext.request.requestURI}对象对象的属性
<body>
请求URI为:${pageContext.request.requestURI} <br />
Content-Type响应头:${pageContext.response.contentType} <br />
服务器信息为:${pageContext.servletContext.serverInfo} <br />
Servlet注册名为:${pageContext.servletConfig.servletName} <br />
</body>
2.4个scope
最后会打印itcase因为找的顺序是pageScope、requestScope、 sessionScope和applicationScope都可以通过setAttribute()方法存储属性,通过getAttribute()方法获取属性。
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<html>
<head></head>
<body>
<% pageContext.setAttribute("userName", "itcast"); %>
<% request.setAttribute("bookName", "Java Web"); %>
<% session.setAttribute("userName", "itheima"); %>
<% application.setAttribute("bookName", "Java 基础"); %>
表达式\${pageScope.userName}的值为:${pageScope.userName} <br />
表达式\${requestScope.bookName}的值为:${requestScope.bookName} <br />
表达式\${sessionScope.userName}的值为:${sessionScope.userName} <br />
表达式\${applicationScope.bookName}的值为:${applicationScope.bookName} <br />
表达式\${userName}的值为:${userName}
</body>
</html>
3param对象用于获取请求参数的某个值与request.getParameter()方法相同
,它是Map类型,
例子:获取客户端请求参数的值
${param.num}获取一个
${paramValues.nums[0]} 获取数组
<body style="text-align: center;">
<form action="${pageContext.request.contextPath}/param.jsp">
num1:<input type="text" name="num1"><br />
num2:<input type="text" name="num"><br />
num3:<input type="text" name="num"><br /> <br />
<input type="submit" value="提交" />
<input type="submit" value="重置" /><hr />
num1: ${param.num1} <br />
num2: ${paramValues.num[0]} <br />
num3: ${paramValues.num[1]} <br />
</form>
</body>
4Cookie隐式对象,第一次只有cookie字段,第二次才会获取对象和值
第一次访问服务器时,服务器会向浏览器回写一个Cookie,此时的Cookie信息是存储在浏览器中的,当刷新浏览器,
第二次访问cookie.jsp页面时,由于浏览器中已经存储了名为userName的Cookie信息,浏览器会将此Cookie信息一同发送给服务器,这时使用表达式${cookie.userName.name }和${cookie.userName.value }便可以获取Cookie的名称和值。
一开始访问一下都是空
获取cookie对象的信息:${cookie.userName}
获取cookie对象的名称:${cookie.userName.name}
获取cookie对象的值:${cookie.userName.value}
5initParam获取(web.xml里面)参数的值
Web应用初始化值
${initParam.author}
(三)JSTL标签库
JSTL
1在使用这些标签库前,必须在JSP页面的顶部使用<%@ taglib%>指令定义引用的标签库和访问前缀。
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
用于输出文本内容的<c:out>标签、用于条件判断的<c:if>标签、用于迭代循环的<c:forEach>标签
2.格式标签库Fmt
SQL标签库sql
XML标签库xml
函数标签库fn
每个厂商都有一个标签库,所以jsp里面要自定义标签
(四)JSTL的下载与使用
jstl.jar文件包含JSTL规范中定义的接口和相关类,standard.jar文件包含用于实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)。
Tld
写上核心地址
(五)Core标签库中的常用标签
1<c:out>语法 escapeXml属性default属性value属性
escapeXml=true下面就不会编码输出
输出:<meta http-equiv="refresh" content="0;url=http://www.itcast.cn" />
单标签<c:out value="value" [default="defaultValue"]
双标签<c:out value="value" [escapeXml="{true|false}"]>unknown</c:out>
输出都是unknown
可以在网页里面直接传入键值输出
2<c:remove>移除标签
<c:remove var="name" [scope=”范围”]/>
范围page、request、session和application
3<c:if>标签,
双标签在标签体中指定要输出的内容
<c:if test="testCondition" var="result"
[scope="{page|request|session|application}"]>
body content
</c:if>
<c:choose>标签,该标签用于指定多个条件选择的组合边界,它必须与<c:when>、<c:otherwise>标签一起使用。
<c:when>都不成立就执行<c:otherwise>里面语句
<body>
<c:choose>
<c:when test="${empty param.username}">
unKnown user.
</c:when>
<c:when test="${param.username=='itcast' }">
${ param.username} is manager.
</c:when>
<c:otherwise>
${ param.username} is employee.
</c:otherwise>
</c:choose>
</body>
可以用c_choose.jsp?username=itcast传参
4.<c:forEach>标签
双标签:迭代指定范围内的集合start,end,步长就行
迭代包含多个对象的集合
<%
List colorsList=new ArrayList();
colorsList.add("red");
colorsList.add("yellow");
colorsList.add("blue");
colorsList.add("green");
colorsList.add("black");
%>
<c:forEach var="color" items="<%=colorsList%>" begin="1"
end="3" step="2">
${color}
</c:forEach>
5.url标签
双标签中构造URL参数
其中<c:param>标签用于获取URL地址中的附加参数,<c:url>标签用于按特定的规则重新构造URL,<c:redirect>标签负责重定向。
<c:url>的var属性:用于指定将构造的URL地址保存到域对象的属性名称。
<body>
使用绝对路径构造URL:<br />
<c:url var="myURL"
value="http://localhost:8080/chapter07/c_out1.jsp">
<c:param name="username" value="张三" />
</c:url>
<a href="${myURL}">c_out1.jsp</a><br />
使用相对路径构造URL:<br />
<c:url var="myURL"
value="c_out1.jsp?username=Tom" />
<a href="${myURL}">c_out1.jsp</a>
var和 value就可以
参数值进行编码