JSP主要用于动态WEB开发,打开一个JSP页面,会发现主要是由HTML和JAVA代码构成,在学校刚开始接触到JSP时,就是采用HTML中嵌入JAVA代码的写法(<% 若干java语句 %>),但是这样存在一个问题就是:整个JSP看起来很乱,尤其是JAVA代码中包含循环和判断时。因此,便有了后来的EL表达式和JSTL标签,用来替换掉JSP中的JAVA代码,使整个JSP看起来整洁。
EL表达式:###
1.输出内容
使用 ${输出内容}这种形式来代替<%=JAVA代码%>进行输出
- ${name},name为域中定义的变量,能获取到值则输出获取的值,否则不输出
- ${map["name"]},获取map中的值,也可以使用${map.name}
- ${object.getName()},object为类对象,调用getName()方法获取值
2.执行运算 - 普通计算。${1+2},会输出3
- 类型转换。${"1"+2},会将2转化为字符2进行拼接,输出12
- 比较运算。${2>1},会输出true
- 空值判断。${empty(name)},会判断name是否为空,输出true或者false,也可以判断对象是否为空、域中是否有属性
- 三元表达式。${2>1?"是" : "否"},会输出是
JSTL标签:###
!!使用myeclipse开发的话,里面会自带有jstl标签库,所以不需要导入包
!!使用eclipse开发,需要以下步骤:
- 导入jstl.jar和standard.jar两个jar包
- 在WEB-INF目录下导入c.tld文件
- 在web.xml中进行配置
<pre><jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
</pre>最后在jsp中引用
<pre><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%></pre>
列举几个常用标签:
1. c:out 中的特殊字符会原样输出
<pre><c:out value="<a href='www.baidu.com'>xxx</a>" escapeXml="false"></c:out></pre>注:escapeXml控制是否转义,默认为true,即不转义,是什么就输出什么(value中的值)。例子中设置escapeXml为false,则会进
行转义输出,即输出xxx
**2. ** c:set 可以更改域中的值
<pre><c:set var="name" value="hahaha"></c:set></pre>注:更改域中名为name的值,若不存在,则添加name
3. c:if做判断
<pre><c:if test="${2>1}">
2是大于1
</c:if></pre>注:test接收一个bool型的数,如果为true就执行c:if里面的代码,否则没变化
4. c:forEach可以遍历
<pre><c:forEach begin="1" end="10" step="2" var="i">
${i}
</c:forEach></pre>上述代码相当于
<pre>for(int i = 1; i <= 10; i+=2){
System.out.print(i);
}</pre>可以在forEach中添加if判断,如下
<pre><c:forEach begin="1" end="10" step="1" var="i" varStatus="stat">
<c:if test="${stat.index % 2 == 0 }">
<font color="red">
${i }
</font>
</c:if>
<c:if test="${stat.index % 2 != 0 }">
${i }
</c:if>
</c:forEach></pre>输出1~10,如果是偶数,设为红色,否则,正常输出
该标签中有个varStatus,它有几个属性
index —— 当前数
count —— 目前的总数
first —— 现在指到的成员是否是第一个成员,返回类型为boolean
last —— 现在指到的成员是都是最后一个成员,返回类型为boolean
5. c:forTokens可以分割字符串
<pre><c:forTokens items="www.baidu.com" delims="." var="i">
${i}
</c:forTokens></pre>注:items表示需要切割的字符串,delims表示以什么为准进行切割,例子中是以点,var用于记录切割的字符片段
6. c:import可以包含页面
<pre><c:import url="/index.jsp">
</c:import></pre>上面这种方式是直接把页面包含进来
<pre><c:import url="/index.jsp" var="p" scope="page">
</c:import>
xxx
${p}
yyy</pre>上面这种方式则是把页面以page类型存入p中,然后在需要的位置输出p即可
7. c:url可以保存url
<pre><c:url value="/index.jsp" context="${pageContext.request.contextPath }" var="u" scope="page">
</c:url>
<a href="${u}">www.abc.com</a></pre>把url保存在u中,在需要的位置直接使用
8. c:redirect页面重定向
<pre><c:redirect url="/index.jsp" context="${pageContext.request.contextPath}">
<c:param name="name" value="huang">
</c:param>
</c:redirect></pre>c:param标签是用于保存放在url中的数据