JSP总结(二)

来源:互联网 发布:苹果手机mac怎么修改 编辑:程序博客网 时间:2024/06/10 16:55

一、ER表达式(Expression Language)注意点:

1.作用:减少JSP页面的Java代码的数量,即减少页面脚本.

2.禁用EL表达式:在page标签内设置isELIgnored属性为true,默认值为false(不禁用).

3.ER表达式符号表示:${ }

4.EL表达式不支持字符串串联

5.获取属性的两种表示方式:${xx.xx}   或   ${xx[“xx”]}

6.EL表达式的隐含变量有11个,JSP隐含变量有9个+Exception,两者共有的是pageCongtext

 

二、JSTL(JavaServerPages Standard Tag Library)

1.作用:该技术也是为了减少页面脚本.

2.Jstl主要包含5个部分:

<1>核心标签库(c)

<2>sql标签库(sql)

<3>xml标签库(x)

<4>函数标签库(fn)

<5>国际化(fmt)

3.使用jstl的准备工作:

<1>\WebContent/WEB-INF/lib下要有这3个jar包:jstl.jar、juli-6.0.14.jar、standard.jar

<2>页面配置信息部分要导包:

如:使用核心标签库 <%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core" %>

Ⅰ.核心标签库:<c:….>

条件动作

<1><c:if test=”el表达式”>

条件满足下的内容

</c:if>

如:

<c:iftest="${sessionScope.numguess.answer!=sessionScope.numguess.guess}">

<!-- c:if标签中间是if条件满足下的内容-->

</c:if>

<2><c:choose>、<c:when>、<c:otherwise>嵌套使用,相当于switch…case语句、if…else语句:

<c:choose>

<c:whentest="">

 

</c:when>

<c:otherwise>

 

</c:otherwise>

</c:choose>

注:当<c:when></c:when>有多个时,相当于switch…case语句,此时<c:otherwise>相当于default的作用。

<3><c:out>页面输出

如:<c:outvalue="${header['Accept1']}"default="ddd"></c:out>     <!—value为页面要输出的内容;value值找不到,就输出default里的值 -->

<c:outvalue="${'<a>超链接</a>'}"escapeXml="true"></c:out> 

<!-- escapeXml设为true()时对特殊字符转义直接打出来,false时不转义即此时为超链接模式 -->

<4><c:set> 页面赋值 <c:remove> 移除

如:

<!-- var:暴露出的变量名 value:变量值   scope:变量范围,默认为page -->

<c:setvar="uname"value="z3"scope="request"></c:set> <!-- 赋值 -->

<c:outvalue="${requestScope.uname}"></c:out>         <!-- 取值方式一-->

${requestScope.uname}<br>                              <!--取值方式二 -->

 

<c:removevar="uname"/>

移除后的值:${requestScope.uname}<br>

 

<jsp:useBeanid="user"class="com.zh.jstl.User" scope="request"></jsp:useBean>

<!-- target:对象名(必须用el表达式表示) property:属性名    value:属性值 -->

<c:settarget="${user}"property="age"value="23"></c:set>      <!-- 赋值 -->

${requestScope.user.age}<br>

<c:out value="${user.age}"></c:out>           <!-- 取值:注意此处 requestScope.age取不到值-->

<5><c:catch> 异常处理

<c:catchvar="ex">

<%=3/0 %>

</c:catch>

<c:out value="${ex}"></c:out>              <!-- 打印出异常 -->

<6><c:forEach> 迭代(遍历)

a.       Map的迭代

<!-- Map:键值对 -->

<%

Map map=newHashMap();

map.put("name","z3");                   

map.put("pwd","123");

request.setAttribute("m",map);

%>

<c:forEachitems="${m}"var="entry">

<c:outvalue="${entry }"></c:out><br>

key:<c:outvalue="${entry.key}"></c:out><br>

value:<c:outvalue="${entry.value}"></c:out><br>

</c:forEach>

b.      数组的迭代

<%

User[] users=new User[2];

User u1=newUser();

u1.setName("z3");

u1.setAge(23);

users[0]=u1;

User u2=newUser();

u2.setName("l4");

u2.setAge(32);

users[1]=u2;

request.setAttribute("users",users);

%>

<c:forEachitems="${users}"var="user">

<c:outvalue="${user.name }"></c:out><br>

<c:outvalue="${user.age }"></c:out><br>

</c:forEach>

c.      遍历的状态信息 <c:varStatus>

<%

int[]a={1,2,3,4,5,6};

request.setAttribute("a", a);

%>

<c:forEachitems="${a}"var="num"varStatus="status">  <!-- varStatus指向的变量类型为LoopTagStatus-->

<c:outvalue="${status.index}"></c:out><br>               <!-- 索引 -->

<c:outvalue="${status.count}"></c:out><br>          <!-- 已经遍历的记录数 -->

<c:outvalue="${status.first}"></c:out><br>          <!-- 是否为第一条记录 -->

<c:outvalue="${status.last}"></c:out><br>               <!-- 是否为最后一条记录-->

</c:forEach>

d.      遍历范围:begin=”开始索引值” end=”结束索引值”

<%

int[]arr={1,2,3,4,5,6};

request.setAttribute("a",arr);

%>

<h1>遍历前三条记录:</h1>

如:

<!-- begin:从指定索引开始,end:从指定索引结束 -->

<c:forEachitems="${a}"var="i"begin="0"end="2">

<c:outvalue="${i}"></c:out>

<c:iftest="${status.last}">

总数是:<c:outvalue="${status.count}"></c:out>

</c:if>

</c:forEach>

<7><c:forTokens>  切割字符串

如:

<!-- 切割字符串 forTokens -->

<!-- forTokens是用来分割字符串的,items为要分割的字符串,delims为分隔符,此处为空格,var为分割每个字符的"指针" -->

<c:forTokensitems="I am a student"delims=" "var="word"> <!-- 分割单个字符 -->

<c:outvalue="${word }"></c:out><br>

</c:forTokens>

 

<c:forTokensitems="I'm a student,my name is z3."delims=" ',"var="word"><!--分割多个字符 -->

<c:outvalue="${word }"></c:out><br>

</c:forTokens>

<8><c:redirect url=”...”></c:redirect>重定向:地址栏转为指定的url

如:<c:redirecturl="http://www.baidu.com"></c:redirect>

<9><c:import url=”…”></c:import>外部包含,可以导入本项目之外的资源,而<jsp:include page=””>(动态包含)和<%@include file=””%>(静态包含)不可以导入外部资源。

如:<c:importurl="http://www.baidu.com"></c:import>

<9><c:url var=”…” value=”…” scope=”…”></c:url>动态url

如:

<%

request.setAttribute("name", "z3");

%>

<c:urlvar="myurl"scope="request"value="c_set.jsp">

<c:paramname="name"value="${name}"></c:param>

</c:url>

${myurl }

 

Ⅱ. Sql标签库:<sql:...>

SQL动作:

<1>数据库连接:<sql:setDataSource>

<sql:setDataSourceuser="用户名" password="密码" url="jdbc:mysql://localhost:3306/test"driver="com.mysql.jdbc.Driver" var="ds"/>

<1>更新插入:<sql:update>

<sql:update var="res" dataSource="${ds}" sql="insertinto tbuser values(?,?)">

<sql:paramvalue="23"></sql:param>    <!--赋值方式一 -->

<sql:param>tw</sql:param>                <!-- 赋值方式二-->

</sql:update>

<!-- 结果:返回受影响的行数 -->

受影响的行数为:${res}

注:sql语句也可以放在标签中间,如:

<sql:updatevar="res" dataSource="${ds}">

insert into tbuservalues(?,?)        

<sql:paramvalue="24"></sql:param>   

<sql:param>xb</sql:param>                

</sql:update>

<!-- 结果 -->

受影响的行数为:${res}

<2>查询:<sql:query>

<!-- maxRows:如果没有指定或指定为-1,那么不限制返回结果集

        maxRowsstartRow配合起来可以进行分页

 -->

<sql:queryvar="rs"dataSource="${ds}"startRow="1"maxRows="-1"sql="select * from tbuser"></sql:query>

<c:forEachitems="${rs.rows}"var="row">

<c:outvalue="${row}"></c:out><br>                 <!-- 取出一行中所有值-->

<c:outvalue="${row['name']}"></c:out><br>            <!-- 取出一行中某属性的值-->

<c:outvalue="${row['id']}"></c:out><br>

</c:forEach>

<3>事务:<sql:transaction>

<4>插入日期:<sql:dateParam>

如:

<%

Date now=newDate();

request.setAttribute("now",now);

%>

传参时:<sql:dateParamvalue="${now}"/>