[笔记] 传智播客-javaWeb笔记(9)

来源:互联网 发布:亚航激活链接无网络 编辑:程序博客网 时间:2024/05/16 11:55
第九章  Jsp标准标签库
                              什么是Jsp标准标签库
                               1)Jsp标准标签库(javaServer pages standard tag library)简称jstl是jsp已经为我们做好的
                                 可以直接使用的用于编写和开发jsp页面的一组标准标签。
                               2)jstl的最终目的是希望为我们提供一个无脚本环境,在此环境中用户可以使用标签来代替以前的Java程序段。
                                 这样简化的jsp页面的开发,即使一个不懂java程序的用户也可以使用jstl来进行jsp页面的开发
                               3)jstl包含三类标签:
                                   A)核心标签库 
                                        11)通用标签
                                        22)条件标签              
                                        33)迭代标签
                                   D)国际化与格式化标签库
                                   E)Sql标签库
                              

                                      核心标签库
                    1)核心标签库由通用标签、条件标签、迭代标签所构成
                    2)通用标签用于操作jsp页面创建的范围变量
                    3)条件标签用于对jsp页面中的代码进行条件判断和处理
                    4)迭代标签用于循环遍历一个对像集合。相当于C#中的for earch
                    5)要使用核心标签库,必须经过两个步骤
                        A)设置工程需要库为JSTL1.1-->选择Project-->rojectProperty-->RequiredLibrarles-->Add
                        B)必须要导入核心标签库的Url格式如下:                        
                          <%@  taglib  uri="
http://java.sun.com/jsp/jstl/core"  prefix="c"%>
                                    通用标签
                   1)通用标签用于设置、删除和显示在jsp页面内创建的变量值。
                   2)<c:set var="变量名" value="值" scope="范围"/>用于设置变量值
                      其中的范围是:page,request,session.application,默认为page
                      比如:
                       <c:set var="uid" value="chen" scope="session"/>
                      相当于:<% session.setAttribute("uid","chen"); %>
                      只不过一个是jsp标签,一个是Javascriptlet Java代码段
                   3)<cut value="${变量名}"/>用于显示变量的值或直接通过EL来进行显示${变量名}
                   4)<c:remove var="变量名" scope="范围"/>
                      
                 条件标签
                   1)条件标签以支持jsp页面中的各种条件,共有两种类型
                      A)<c:if test="条件" >  相当于 if  (条件)
                          内容                       {
                        </c:if>                      }                      
                       举例:
                        1)让用户输入两个数,求出最大值与最小值
                          提示:创建一个页面max.jsp页面,然后提交到dowithmax.jsp页面 
                           <c:if test="${param.num1>0+param.num2}">
                               <c:set var="max" value="${param.num1}"/>
                               </c:if>
                           <c:if test="${param.num1<0+param.num2}">
                              <c:set var="max" value="${param.num2}"/>
                           </c:if>
                         最大值是:<cut value="${max}"/>                      
                        2)让用户输入商品数量、商品单价、选择是否是会员来核算应付款
                          一级会员:98折 二级会员:97折 三级会员:96折
                          提示:创建一个buy.jsp页面,然后创建一个dowithbuy.jsp页面 
                           <c:if test="${param.vip==1}">
                              <c:set var="discount" value="0.99"/>
                           </c:if>
                           <c:if test="${param.vip==2}">
                              <c:set var="discount" value="0.98"/>
                           </c:if>
                          <c:if test="${param.vip==3}">
                              <c:set var="discount" value="0.97"/>
                          </c:if>
                         应付款:${param.amount*param.unitprice*discount}
                    B)<c:choose>
                           <c:when test="条件1">
                                内容
                           </c:when>
                           <c:when test="条件2">
                               内容
                           </c:when>                                                       
                                ..............
                           <ctherwise>
                               内容
                           </otherwise>
                       </c:choose>
                         
         1:修改上页的两例 
                       2:让用户输入两个数和一个操作符,求出对应值

                          
                                  迭代标签
                   1)迭代标签相当于C#中的for earch,就是循环。
                   2)迭代标签有两种形式。一种是<forEeach>,另外一种是<forTokens>
                    A):<c:forEeach  var="迭代变量名" items="集合" varStatus="状态变量名">
                        内容
                      </c:forEeach>  
                      说明:
                         var表示变量名相当于foreach(int item in 集合) 中的item
                         items:相当于foreach中的item
                         varStatus:是状态变量,可以省略
                           通常有:
                            ${状态变量名.count}---从1开始的当前迭代项
                            ${状态变量名.index}---从0开始的当前迭代项
                         
                            举例:
                            1)
                             <%
     String[] Car={"彩电","空调","手机","微波炉"};
        %>
                            所有的汔车如下:
                                <c:forEach var="shop" items="<%=Car%>" varStatus="status">
                                    <ul>第${status.count}种商品是${shop}</ul>
                                </c:forEach>
                           2)从数据库中查询出一个ResultSet并存放ArraryList。通过迭代标签进行输出
                             public class shop
                              {
                                   public ArrayList getAllShop()
                                      {         
                                          ArrayList shops = new ArrayList();
                                          ResultSet rs = tagapp.DbManager.RunHasResultSql("select * from shopinfo");
                                          while (rs.next())
                                           {
                                               shop demo = new shop();
                                               demo.setId(rs.getString(1));
                                               demo.setName(rs.getString(2));
                                               demo.setUnitPrice(rs.getInt(3));
                                               shops.add(demo);
                                            }
                                      return shops; 
                               }

                                    <jsp:useBean id="demo" scope="session" class="tagapp.shop"/>
                                    <c:forEach var="item" items="<%=demo.getAllShop()%>">
                                    ${item.id} ${item.name} ${item.unitPrice} <br>
                                    </c:forEach>

                           B):<c: forTokens items="以分隔符分开的字符串" delims="分隔符" var="迭代变量名">
                                内容
                              </c:forTokens

                           应用举例:
                            1)
                              <c:set var="shops" value="彩电,空调,热水器"/>
                              <c:forTokens delims="," items="${shops}" var="item">
                               ${item}<br />
                              </c:forTokens>
                           2)从数据库中取出由固定分隔符分开的某个字段的值
                             shop表:
                                   s1-彩电-1200
                                   s2-空调-1300
       s3-微波炉-1500
                           


                                     国际化与格式化标签
                        1)国际化与格式化标签主要是用来实现一个WEB应用程序同时有几种国家的语言
                        2)必须要导入:<%@ taglib uri="
http://java.sun.com/jsp/jstl/fmt"  prefix="fmt" %>
                        2)原理:
                           A:为每一种语言做一个资源文件。比如:
                               app_en.properties(英文), app_zh.properties(中文)
                               格式形如:键=值
                               app_en.properties文件的内容如下
                                  uid=this my uid
                                  pwd=this my pwd
                                  login=login
                                  reset=reset 
                              app_zh.properties文件的内容如下
                                  uid=用户名
                                  pwd=密码
                                  login=登录
                                  reset=重置
                               1:注意资源文件命名的规范:文件名_两个字符标识. properties
                               2:如果是中文为了避免乱码。要通过如下命令进行转换
                                 native2ascii -encoding gb2312 源文件 目的文件 
                                  比如: 
                                 native2ascii -encoding gb2312 app_zh1.properties(源文件) app_zh1.properties(目的文件)
                               3:资源文件一定要放在WEB-INF\classes下面,classes一定要手动创建******
                             B:通过<fmt:setLocale value="en或zh"/>来决定使用那种语言的资源文件
                             C:通过<fmt:setBundle basename="app"/>来决定要加载那些资源文件
                             D:通过<fmt:message key="pwd" />来取出资源文件里面的值
                             E:注意B,C的顺序不能颠倒
                         举例:
                             1)登录的中文与英文的例子   
                                    <c:if test="${param.language==null || param.language=='en'}">
        <fmt:setLocale value="en"/>
                                    </c:if>
                                    <c:if test="${param.language=='zh'}">
                                    <fmt:setLocale value="zh"/>
                                    </c:if>
                                    <fmt:setBundle basename="app"/>
                                       
                                             Sql标签库
                            1)JSTL的SQL标签用于访问数据库,它提供的各种标签可用于在jsp页面内直接访问
                              数据库,从而减少了JavaScriptlet代码
                            2)要使用sql标签库,必须要导入<%@ taglib uri="
http://java.sun.com/jsp/jstl/sql"  prefix="sql" %>
                            3)Sql标签库由以下几种
                               A:设置数据源
                                 格式:<sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver" url="jdbcdbc:jsp" var="conn"/> 
                                 var:给数据源取一个别名,以后其它的sql标签将使用该变量做为数据源进行查询
                                 scope:数据源变量的范围
                               B:对数据库进行更新操作
                                 格式:
                                  <sql:update dataSource="${数据源变量}">
                                   写上更新语句,是不返回结果的(delete,update,insert,create)
                                  </sql:update>
                                 dataSource:指定进行数据更新的连接

                                 比如:                  
                                 <sql:update dataSource="${conn}">
                                  update shopinfo set unitprice=unitprice+100
                                 </sql:update> 

                               C:对数据库进行查询
                                 格式:
                                  <sql:query var="shops" dataSource="${conn}">  
                                     select语句
                                  </sql:query>
                                  var:给查询的结果取一个变量名 
                                  dataSource:指定进行数据更新的连接
                                  此标签经常与<forEarch>标签一起使用,来显示查询出的值
                                  在使用<forEarch>时可以使用begin end 来指定需要从那里开始到那里结束****
                               比如:
                                 <sql:query var="shops" dataSource="${conn}">
                                   select * from shopinfo 
                                 </sql:query>

                               <c:forEach var="row" items="${shops.rows}">                              
                                     ${row.id}
                                     ${row.name} 
                                     ${row.unitprice} 
                               </c:forEach>
                               说明:
                                1)<c:forEach var="row" items="${shops.rows}" begin="1"> 从第二行开始,全部取到
                                2)<c:forEach var="row" items="${shops.rows}" begin="1" end="3"> 从第二行到第四行,全部取到

                          D:为sql语句中的参数设置值,它一般是<sql:query>与<sql:update>的子标签
                                格式:<sql:param   value="值"/>
                                比如:
                                 <c:set var="id" value="s1"/>
                                 <sql:query var="shops" dataSource="${conn}">
                                     select * from shopinfo where id=?
                                     <sql:param value="${id}"/>
                                 </sql:query>
                                  
                            
                             举例:
                             1)通过标签从数据库查询出数据,并显示出来
                             2)从表单填写商品信息并添加到数据库中


                             3)让用户从表单中选择部门编号,从另一个页面中显示所有该部门的职工


                               2)在第一题的基础上进行数据的分页
                                   <c:if test="${conn==null}">
                                   <sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver" url="jdbcdbc:jsp" var="conn" scope="session"/>
                                   <sql:query var="shops" dataSource="${conn}" scope="session">
                                      elect * from test
                                   </sql:query>
                                    <c:set var="curpage" value="1" scope="session"/> //设置当前页的变量curpage
                                  </c:if>
                                     <c:choose>
                                        c:when test="${shops.rowCount==0}">
                                         没的查询的结果
                                        </c:when>
                                        <ctherwise> //开始查询
                                            <c:if test="${param.page == 'next'}"> //如果是下一页
                                                <c:if test="${pagesize*curpage<shops.rowCount}"> //如果没有到末尾
                                                   <c:set var="curpage" value="${curpage+1}" scope="session"/>
                                                </c:if>
                                            </c:if>
                                       <c:if test="${param.page=='prio'}"> 如果是上页
                                         <c:if test="${curpage>1}"> //如果没有到首页
                                            <c:set var="curpage" value="${curpage-1}" scope="session"/>
                                         </c:if>
                                        </c:if>
                                       <c:forEach var="row" items="${shops.rows}" begin="${pagesize*(curpage-1)}" end="${pagesize*curpage-1}" >
                                          <tr>
                                              <td><div align="center">${row.id}</div></td>
                                              <td><div align="center">${row.a}</div></td>
                                              <td><div align="center">${row.b}</div></td>
                                           </tr>
                                        </c:forEach>
                                          <a href="jsp1.jsp?page=next">下一页</a> <a href="jsp1.jsp?page=prio">上一页</a>
                                       </ctherwise>
                                      </c:choose>
原创粉丝点击