




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章JSP指令与脚本元素回顾JavaServerPage简称为JSP,它是运行在服务器端的脚本语言之一,与其它服务器端脚本语言一样,是开发动态网页的技术之一JSP技术解决界面显示问题,而Servlet主要解决内部逻辑问题JSP页面由静态内容、指令、表达式、Scriptlet声明、标准动作、注释几种元素构成JSP的生命周期包括页面初始化、处理客用户端请求并作出应答和退出JSP这3个阶段本章内容JSP脚本元素(表达式、Scriptlet、声明)page指令、include指令、taglib指令本章目标掌握JSP脚本元素的用法掌握page指令的常用属性完成“医院处方查询系统”所有功能1.JSP脚本元素JSP脚本元素包括表达式 Scriptlet声明1.1JSP表达式JSP表达式表达式(Expression)用于向页面中输出信息 格式:<%=表达式%>JSP表达式形式普通变量含返回值的方法Java表达式JSP表达式普通变量可以返回值的方法Java表达式<body><%//定义一个num变量
intnum=(newRandom()).nextInt(10);%>
产生的随机变量值是:<%=num%>//定义一个Test类public
classTest{//定义一个返回值的方法doWithpublic
staticStringdoWith(Stringpeople){return"<fontcolor=red>※※"+people+"※※</font>";}}<body>
本次幸运之星是:<%=Test.doWith("飞雪")%></body><%//定义购买的商品数量
intquantity=4;//定义商品单价
doubleprice=12.5;//定义标志位,用于标识是否是会员,1:是会员,0:不是会员.会员可打8.5折
intflag=1; doublepay=100;//实付款
%><br/>=========家家乐超市收银系统=============<h1>应付款:<%=flag==1?quantity*price*0.85:quantity*price%></h1>=========家家乐超市收银系统=============<br>JSP表达式表达式可以应用在JSP页面中的如下位置生成动态的链接地址 使form表单提交到不同的页面为通过循环语句生成的元素命名<%Stringpath="welcome.jsp";%><ahref="<%=path%>">链接到</a><ahref=”welcome.jsp”>链接到</a><%Stringname=”login.jsp”;%><formaction=”<%=name%>”></form><formaction=”login.jsp”></form>
<%forinti=1;i<3;i++){%>file<%=i%>:<inputtype=”text”name=”file<%=i%>”><br><%}%>file1:<inputtype=”text”name=”file1”><br>file2:<inputtype=”text”name=”file2”><br>1.2声明标识声明标识格式:<%!声明变量或方法的代码%>注意几点在“<%”与“!”之间无须加空格声明的语法与在Java语言中声明变量和方法时一样在页面中通过“声明标识”声明的变量和方法,在整个页面内都有效,它们将成为JSP页面被转换为类文件中的属性和方法,并且会被多个线程即多个用户共享
变量或方法的生命周期从创建到服务器关闭后结束
1.2声明标识实现一个简单的网页计数器<%@pagelanguage="java"contentType="text/html;charset=GB2312"%><%!intnum=0;//声明一个计数器变量
synchronizedvoidadd()//该方法用来实现计数器加1
{num++;}%><%add();//调用add方法%><html><head><title>网页计数器</title></head><body><center>
<h1>你是第<%=num%>位访客</h1></center></body></html>关闭浏览器关闭Tomcat如果把代码修改如下:<%intnum=0;num++;%><h1>你是第<%=num%>位访客</h1>能实现网页计数器吗?1.3脚本程序(Scriptlet)脚本程序(Scriptlet)格式:<%Java程序片段%>注意它在形式上与表达式的区别在于“<%...%>”中没有“=”中间是一段Java代码,不是表达式,每条Java语句要以分号结尾位于Scriptlet中定义的变量和方法不会被其他线程共享,当前用户对该变量的操作不会影响到其它用户当变量所在的页面关闭后就会被销毁
脚本程序(Scriptlet)通过“声明标识”声明的变量与位于Scriptlet中变量的区别
<%@pagelanguage="java"contentType="text/html;charset=GB2312"%><%!intnum=0;//声明一个num变量
%><html><head></head><body><%intnum1=0;//声明一个Scriptlet变量
num++;//自加
num1++;//自加
%>num的值是:<%=num%><br/>num1的值是:<%=num1%></body></html>第一次运行结果
刷新3次运行结果
2.JSP指令标识什么是指令标识通过指令标识可以使服务器按照指令的设置来执行动作通过指令可设置在整个JSP页面范围内有效的属性在一个指令中可以设置多个属性,这些属性的设置可以影响到整个页面page指令page指令称为页面指令,利用页面指令可以定义在整个JSP页面范围内有效的属性include指令include指令用于在运行时将HTML文件或JSP页面嵌入到另一个JSP页面taglib指令taglib指令的作用是在JSP页面中,将标签库描述符文件(TLD)引到该页面中,并设置前缀,利用标签的前缀去使用标签库描述符文件中的标签2.1Page指令Page指令格式:<%@pageattribute1=”value2”attribute2=”value2”...%>page指令可以放在JSP页面中的任意位置,但习惯上放在文件的开始部分,提高程序的可读性page指令具有多种属性,通过这些属性的设置可以影响到当前的JSP页面属性名作用extends用于指定一个JSP页面转换为Servlet后继承的类session默认值为true,表示当前页面支持session。设为false表示不支持sessionbuffer设置out对象使用缓冲区的大小info该属性可设置为任意字符串,如当前页面的作者或其它有关的页面信息errorPage该属性用来指定一个当前页面出现异常时所要调用的页面isErrorPage表示此页面是否为错误处理页面,默认为falseisELIgnored表示此页面是否忽略EL表达式。默认为false,表示不会忽略EL表达式pageEncoding用来设置JSP页面字符的编码,默认值为”ISO-8859-1”2.2include指令include指令格式:<%@includefile=”fileName”%>include指令只支持file属性,该属性指定要在编译时嵌入的文件名页面的名称应当在编译时已知,文件的内容将被嵌入include指令所在的
JSP页面为什么要使用include指令使用include指令引用外部文件,可减少代码冗余
Logo图片区侧栏动态内容页尾遇到这样的页面模板怎么办?include指令include指令应用<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body><imgsrc="images/top.jpg"></body></html><%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body><imgsrc="images/side.jpg"></div></body></html><%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></style></head><body><imgsrc="images/bottom.jpg"></body></html>...<body><tablewidth="100%"height="80%"border="0"align="center"cellpadding="0"cellspacing="0"><tr><tdheight="58"colspan="2"><%@includefile="top.jsp"%></td></tr><trbgcolor=""><tdwidth="11%"height="200"valign="top"><%@includefile="side.jsp"%></td><tdwidth="89%"align="center"><h1>这是jsp3动态变化的内容</h1></td></tr><tr><tdcolspan="2"><%@includefile="bottom.jsp"%></td></tr></table></body>...2.3taglib指令什么是taglib指令taglib指令的作用是在JSP页面中,将标签库描述文件(TLD)引到该页面中,并设置前缀,利用标签的前缀去使用标签库描述符文件中的标签标签描述符文件为XML文件,包含一系列标签说明,它的文件后缀名是.tldtaglib指令格式 <%@tagliburi=“标签库描述符文件”prefix=“前缀名”%>uri:指定了JSP要在web.xml文件中查找的标签库描述符prefix:指定一个在页面中使用由uri属性指定的标签库的前缀<%@taglib=/jsp/jstl/coreprefix=”c”%><c:setvar=”name”value=”jack”/>上述代码通过”<c:set>”标签将”jack”值赋给了变量”name”
3.JSP脚本元素综合应用3.1功能概述为方便用户查询,在”医生姓名”输入框中只需输入拼音码。例如:张三丰”,对应拼音码为:“zsf”
在没有查询出数据之前该按钮不可用有结果时,该按钮可用系统将根据拼音码进行查询并显示查询结果显示与“拼音码“对应医生的处方单总额如果该处方单已经审核,则“审核”按钮状态不可用,否则“审核”按钮可用显示与“拼音码“对应医生的姓名3.2数据库设计医院处方查询系统数据库设计相关表
数据库关系图示例数据
3.3代码创建一个用于封装处方的实体类PrescriptionpublicclassPrescription{privateintid;privateStringprescriptionId;privateDateprescriptionDate;privatedoubleprescriptionMoney;privatebooleanisVerify;publicPrescription(){} publicPrescription(intid,StringprescriptionId,DateprescriptionDate,doubleprescriptionMoney,booleanisVerify){ super(); this.id=id; this.prescriptionId=prescriptionId; this.prescriptionDate=prescriptionDate; this.prescriptionMoney=prescriptionMoney; this.isVerify=isVerify;} ...有参构造方法代码创建用于生成主页面的prescription.jsp
... <body><% intflag=0;//判断是否查询到数据if(request.getAttribute("prescriptionList")!=null){ flag=1;//修改标志位
//从request属性中获取处方集合prescriptionList=(List)request.getAttribute("prescriptionList");}%>
用flag来判断是否查询到数据,如果查询不到则不会显示查询表格,并且”导出exel”按钮不可用
<%if(flag==1)//如果有数据,把此按钮做为可用{%><inputname="Submit3"type="submit"value="导出excel"> <%}else//做为不可用
{ %><inputname="Submit3"type="submit"value="导出excel"disabled="true"> <%}%>
</td></tr></table></form></td></tr><%if(flag==1)//如果有数据则显示
{%><tr><tdheight="28"nowrap>
如果有数据,则显示数据
如果有数据,则按钮可用
代码创建用于生成主页面的prescription.jsp
<%doublesum=0.0;//定义一个变量用于存放处方总金额
for(inti=0;i<prescriptionList.size();i++){Prescriptionprescription=(Prescription)prescriptionList.get(i); sum+=prescription.getPrescriptionMoney(); SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日");StringformatDate=sdf.format(prescription.getPrescriptionDate());%>
<formname="frm1"action="doWithVerifyServlet?id=<%=prescription.getId()%>"method="post"><tralign="center"bgcolor="#F7F6FB"><tdnowrap><%=prescription.getPrescriptionId()%></td><tdnowrap><%=formatDate%></td><tdnowrap><%=prescription.getPrescriptionMoney()%></td><tdnowrap><%if(prescription.getIsVerify())//如果已经审核了,则把按钮置为不可用
{%><inputname="Submit2"type="submit"value="审核"disabled="true"><%}else{%><inputname="Submit2"type="submit"value="审核"><%}%></td></tr></form><%}%>
教员演示代码循环取出所有处方设置超连接ID获取每一笔处方信息如果审核了,则将按钮作为不可用代码创建DoWithQueryServlet,该Servlet根据用户输入的拼音码,查询数据库获取结果
Stringpym=request.getParameter("pym");//得到用户输入的pym//把pym放入session中,以便在执行审核功能时使用request.getSession().setAttribute("pym",pym);//构造sql语句Stringsql="select*fromtb_doctora,tb_prescriptionbwherea.id=b.doctorIdanda.pym=?";Object[]params={pym};//调用数据层得到结果Resultresult=DbHelp.runSelectSql(sql,params);Map[]rows=result.getRows();//如果存在数据if(rows.length>0){//构造一个sql语句,得到医生信息sql="selectdnamefromtb_doctorwherepym=?";Object[]params1={pym};//执行sql语句,获取医生信息结果Resultresult1=DbHelp.runSelectSql(sql,params1);//获取医生姓名Stringdname=result1.getRows()[0].get("dname").toString();//构造一个集合来保存处方列表ListprescriptionList=newArrayList();//循环取出每一条记录for(Maprow:rows){//得到IDintid=Integer.parseInt(row.get("id").toString());//得到处方IDStringprescriptionId=row.get("prescriptionId").toString();//得到产生日期DateprescriptionDate=Date.valueOf(row.get("prescriptionDate").toString().substring(0,10));//得到处方金额doubleprescriptionMoney=Double.parseDouble(row.get("prescriptionMoney").toString());
//得到是否审核booleanisVerify=Boolean.parseBoolean(row.get("isVerify").toString());//构造一个处方对象Prescriptionprescription=newPrescription(id,prescriptionId,prescriptionDate,prescriptionMoney,isVerify);//添加到集合里面prescriptionList.add(prescription);//放入request属性中request.setAttribute("prescriptionList",prescriptionList);//处方集合request.setAttribute("dname",dname);//医生姓名}}//转发到prescription.jsp页面request.getRequestDispatcher("prescription.jsp").forward(request,response);代码创建DoWithVerifyServlet,该Servlet用于处理审核处方单的业务逻辑…//获取要审核的Idintid=Integer.parseInt(request.getParameter("id"));//构造sql语句Stringsql="updatetb_prescriptionsetisVerify=1whereid=?";Object[]params={id};//调用数据层,执行更新if(DbHelp.runUpdateSql(sql,params))//如果更新成功
{//获取上次输入的拼音码Stringpym=request.getSession().getAttribute("pym
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2020-2021广东省深圳市宝安区宝城小学六年级小升初语文综合测试卷及答案
- 主体模板工程施工方案
- 扣盘式脚手架施工方案
- 2025年中考物理模拟试卷猜题卷3(含答案)
- 2025届浙江省台州市团队六校中考生物模拟预测题含解析
- 劳务合同保密合同范例
- 肝移植GVHD的护理
- 农资服务代办合同范例
- 学校秋季志愿服务计划
- 制定有效的轮岗计划
- 2025年初级社会工作者综合能力全国考试题库(含答案)
- 2024解析:第十章 浮力综合应用-讲核心(解析版)
- Unit4BodylanguageUsingLanguage肢体语言在续写中的运用课件高中英语人教版选择性
- 大数据与人工智能营销(南昌大学)知到智慧树章节答案
- 《让座》(课件)西师大版音乐二年级上册
- 广告创作与视觉传媒考核试卷
- 2024年江西省公务员考试《行测》真题及答案解析
- 医学装备管理工作总结
- 2024-2025学年湖南省雅礼集团高二(上)第一次月考数学试卷(含答案)
- 现代家政导论-课件 4.1.3认识我国家政教育发展
- 《互联网应用新特征》课件 2024-2025学年人教版(2024)初中信息科技七年级全一册
评论
0/150
提交评论