参考答案
EL表达式是一套简单的计算规则,用于给JSP标签的属性赋值,也可以直接用来输出。
参考答案
EL表达式的作用可分为以下三类:
1. 访问Bean的属性。
2. 输出简单的运算结果。
3. 获取请求参数值。
A. EL表达式查找对象的范围依次是request,pageContext,session,application。
B. 使用EL表达式输出对象的属性值时,如果属性值为空,则输出空白。
C. 如果指定了对象的查找范围,那么如果在该范围内没有找到绑定的对象则不会再去其他范围进行查找了。
D. 使用EL表达式输出Bean属性时,不允许使用下标的形式。
参考答案
本题正确答案为BC
A选项说法错误。EL表达式查找对象的范围依次是pageContext 、request、session、application。
D选项说法错误。使用EL表达式输出Bean属性时,允许使用下标的形式。例如:
${ user.interests[0] }
输出user对象的interests的属性的第0个元素的值。
参考答案
使用JSTL标签的作用是可以降低代码工作量,界面更加简洁,便于维护。后台开发人员和前端开发人员可以分工合作,从而提高团队开发的效率。
A. 核心标签中的if标签、choose标签、forEach标签都有test属性。
B. 核心标签中的choose标签内可以包含when和otherwise子标签。
C.无法获取forEach标签迭代时的下标。
D. 自定义标签时可以继承自javax.servlet.jsp.tagext.SimpleTagSupport类。
参考答案
本题正确答案为BD
A选项说法错误。if标签有test属性,choose标签和forEach标签没有test属性。
C选项说法错误。forEach标签的varStatus属性表示指定一个绑定名称,绑定值是一个由容器创建的对象,该对象封装了当前迭代的状态。当绑定名称为index时返回正在被迭代的对象的下标,下标从0开始。
参考答案
1. 开发自定义标签的步骤如下:
1)编写Java类,继承SimpleTagSupport类。
2)在doTag方法中添加处理逻辑。
3)配置标签说明文件。
2.标签的运行原理如下:
容器依据JSP标签的命名空间找到标签的描述文件(.tld文件),然后依据标签名字找到标签类,接下来将该标签类实例化。容器会依据标签的属性给标签实例的属性赋值,然后调用标签实例的doTag方法。
参考答案
本案例在课后练习“编写程序,监听用户访问NETCTOSS系统的频度”的基础上完成。需要将listAccount.jsp、modifyAccount.jsp页面中的Java代码由EL表达式和JSTL进行替换。
完成本案例可以按照如下步骤进行。
步骤一:构建使用JSTL的环境
首先,如果web工程环境中没有使用JSTL所需的jar包,则将其拷贝到当前工程的WEB-INF/lib 目录下,工程结构如图-1所示。
图– 1
步骤二:修改listAccount.jsp文件
1)使用taglib指令导入要使用的JSP标签,如图-2所示。
图 - 2
2)删除listAccount.jsp中的Java代码的小脚本,使用JSTL和EL进行替换,如图-3所示。
图– 3
步骤三:修改modifyAccount.jsp文件
删除modifyAccount.jsp中的Java代码的小脚本,使用JSTL和EL进行替换,如图-4,图-5所示。
图– 4
图– 5
本案例的完整代码如下。
listAccount.jsp文件的完整代码如下所示:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="entity.*,java.util.*"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>达内-NetCTOSS</title> <link type="text/css" rel="stylesheet" media="all" href="styles/global.css" /> <link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" /> <script language="javascript" type="text/javascript"> //删除 function deleteAccount(accountid) { var r = window.confirm("确定要删除此账务账号吗?\r\n删除后将不能恢复,且会删除其下属的所有业务账号。"); document.getElementById("operate_result_info").style.display = "block"; } //开通或暂停 function setState() { var r = window.confirm("确定要开通此账务账号吗?"); document.getElementById("operate_result_info").style.display = "block"; } </script> </head> <body> <!--Logo区域开始--> <div id="header"> <img src="../images/logo.png" alt="logo" class="left" /> <a href="#">[退出]</a> </div> <!--Logo区域结束--> <!--导航区域开始--> <div id="navi"> <ul id="menu"> <li> <a href="../index.html" class="index_off"></a> </li> <li> <a href="../role/role_list.html" class="role_off"></a> </li> <li> <a href="../admin/admin_list.html" class="admin_off"></a> </li> <li> <a href="../fee/fee_list.html" class="fee_off"></a> </li> <li> <a href="../account/account_list.html" class="account_on"></a> </li> <li> <a href="../service/service_list.html" class="service_off"></a> </li> <li> <a href="../bill/bill_list.html" class="bill_off"></a> </li> <li> <a href="../report/report_list.html" class="report_off"></a> </li> <li> <a href="../user/user_info.html" class="information_off"></a> </li> <li> <a href="../user/user_modi_pwd.html" class="password_off"></a> </li> </ul> </div> <!--导航区域结束--> <!--主要区域开始--> <div id="main"> <form action="" method=""> <!--查询--> <div class="search_add"> <div> 身份证: <input type="text" value="不验证" class="text_search" /> </div> <div> 姓名: <input type="text" class="width70 text_search" value="不验证" /> </div> <div> 登录名: <input type="text" value="不验证" class="text_search" " /> </div> <div> 状态: <select class="select_search"> <option> 全部 </option> <option> 开通 </option> <option> 暂停 </option> <option> 删除 </option> </select> </div> <div> <input type="button" value="搜索" class="btn_search" /> </div> <input type="button" value="增加" class="btn_add" onclick="location.href='addAccount.jsp';" /> </div> <!--删除等的操作提示--> <div id="operate_result_info" class="operate_success"> <img src="../images/close.png" onclick="this.parentNode.style.display='none';" /> 删除成功,且已删除其下属的业务账号! </div> <!--数据区域:用表格展示数据--> <div id="data"> <table id="datalist"> <tr> <th colspan="6"> NETCTOSS系统被访问过<%=application.getAttribute("count")%>次 </th> </tr> <tr> <th> 账号ID </th> <th> 姓名 </th> <th class="width150"> 身份证 </th> <th> 登录名 </th> <th> 状态 </th> <th class="width200"></th> </tr> <c:forEach var="account" items="${accounts}" > <tr> <td>${account.accountId}</td> <td> <a href="account_detail.html">${account.realName}</a> </td> <td>${account.idcardNo}</td> <td>${account.loginName}</td> <td> <c:if test="account.status=='0'"> 开通 </c:if> <c:if test="account.status=='1'"> 暂停 </c:if> <c:if test="account.status=='2'"> 删除 </c:if> </td> <td class="td_modi"> <input type="button" value="暂停" class="btn_pause" onclick="setState();" /> <input type="button" value="修改" class="btn_modify" onclick="location.href='load.do?accountId=${account.accountId}'" /> <input type="button" value="删除" class="btn_delete" onclick="location.href='delete.do?accountId=${account.accountId}'" /> </td> </tr> </c:forEach> </table> </div> <!--分页--> <div id="pages"> <a href="#">首页</a> <a href="#">上一页</a> <a href="#" class="current_page">1</a> <a href="#">2</a> <a href="#">3</a> <a href="#">4</a> <a href="#">5</a> <a href="#">下一页</a> <a href="#">末页</a> </div> </form> </div> <!--主要区域结束--> <div id="footer"> <p> [源自北美的技术,最优秀的师资,最真实的企业环境,最适用的实战项目] </p> <p> 版权所有(C)加拿大达内IT培训集团公司 </p> </div> </body> </html>
modifyAccount.jsp完整代码如下所示:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="entity.*,java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>达内-NetCTOSS</title> <link type="text/css" rel="stylesheet" media="all" href="styles/global.css" /> <link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" /> <script language="javascript" type="text/javascript"> //保存成功的提示信息 functionshowResult() { showResultDiv(true); window.setTimeout("showResultDiv(false);", 3000); } functionshowResultDiv(flag) { var divResult = document.getElementById("save_result_info"); if (flag) divResult.style.display = "block"; else divResult.style.display = "none"; } //显示修改密码的信息项 functionshowPwd(chkObj) { if (chkObj.checked) document.getElementById("divPwds").style.display = "block"; else document.getElementById("divPwds").style.display = "none"; } </script> </head> <body> <!--Logo区域开始--> <div id="header"> <img src="../images/logo.png" alt="logo" class="left" /> <a href="#">[退出]</a> </div> <!--Logo区域结束--> <!--导航区域开始--> <div id="navi"> <ul id="menu"> <li> <a href="../index.html" class="index_off"></a> </li> <li> <a href="../role/role_list.html" class="role_off"></a> </li> <li> <a href="../admin/admin_list.html" class="admin_off"></a> </li> <li> <a href="../fee/fee_list.html" class="fee_off"></a> </li> <li> <a href="../account/account_list.html" class="account_on"></a> </li> <li> <a href="../service/service_list.html" class="service_off"></a> </li> <li> <a href="../bill/bill_list.html" class="bill_off"></a> </li> <li> <a href="../report/report_list.html" class="report_off"></a> </li> <li> <a href="../user/user_info.html" class="information_off"></a> </li> <li> <a href="../user/user_modi_pwd.html" class="password_off"></a> </li> </ul> </div> <!--导航区域结束--> <!--主要区域开始--> <div id="main"> <!--保存成功或者失败的提示消息--> <div id="save_result_info" class="save_fail"> 保存失败,该身份证已经开通过账务账号! </div> <form action="modify.do" method="post" class="main_form"> <!--必填项--> <div class="text_info clearfix"> <span>账务账号ID:</span> </div> <div class="input_info"> <input type="text" name="accountId" value="${account.accountId}" readonly class="readonly" /> </div> <div class="text_info clearfix"> <span>姓名:</span> </div> <div class="input_info"> <input type="text" name="realName" value="${account.realName}" /> <span class="required">*</span> <div class="validate_msg_long"> 20长度以内的汉字、字母和数字的组合 </div> </div> <div class="text_info clearfix"> <span>身份证:</span> </div> <div class="input_info"> <input type="text" name="idcardNo" value="${account.idcardNo}" /> <span class="required">*</span> <div class="validate_msg_long"> 正确的身份证号码格式 </div> </div> <div class="text_info clearfix"> <span>登录账号:</span> </div> <div class="input_info"> <input type="text" name="loginName" value="${account.loginName}" /> <span class="required">*</span> <div class="validate_msg_long"> 30长度以内的字母、数字和下划线的组合 </div> </div> <div class="text_info clearfix"> <span>电话:</span> </div> <div class="input_info"> <input type="text" name="telephone" class="width200" value="${account.telephone}" /> <span class="required">*</span> <div class="validate_msg_medium"> 正确的电话号码格式:手机或固话 </div> </div> <!--操作按钮--> <div class="button_info clearfix"> <input type="submit" value="保存" class="btn_save" onclick="showResult();" /> <input type="button" value="取消" class="btn_save" /> </div> </form> </div> <!--主要区域结束--> <div id="footer"> <span>[源自北美的技术,最优秀的师资,最真实的企业环境,最适用的实战项目]</span> <br /> <span>版权所有(C)加拿大达内IT培训集团公司 </span> </div> </body> </html>