版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章目标掌握JSP基本语法掌握JSP指令和动作掌握JSP内置对象的使用了解JSP和Servlet的关系能够在JSP中使用JDBC访问数据库运用JSP技术实现综合案例5.1JSP概述JSP(JavaServerPages)是指:在HTML中嵌入Java脚本代码由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码然后将生成的整个页面信息返回给客户端JSP页面数据库服务器应用服务器编译、执行客户端嵌入Java脚本1234返回页面信息为什么需要JSP为什么需要基于B/S技术的动态网页?B/S技术的特点是什么?使用动态网页,可以动态输出网页内容、同用户进行交互、对网页内容进行在线更新应用服务器IEIE解释执行HTML文件从服务器端检索到的信息返回响应客户端的请求信息发送请求访问数据库返回结果运行JSP等服务器端程序1用户输入234数据库服务器3执行2翻译编译1请求响应JSP执行过程Web容器处理JSP文件请求需要经过3个阶段:翻译阶段编译阶段执行阶段应用服务器客户端JSP文件.java.class执行第二次请求响应JSP执行过程第一次请求之后,Web容器可以重用已经编译好的字节码文件应用服务器客户端.class注意:如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译演示示例:JSP页面响应速度编写第一个JSP程序如何在浏览器上动态输出当前日期?<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%><html><head><title>第一个JSP程序</title></head><body>
你好:<br>
现在时间是:<%=newDate()%><br></body></html>显然,无法通过静态HTML完成这个效果,试一试JSP,看看是否可行演示示例:输出当前日期5.2JSP编程基础JSP基本语法JSP页面的元素包括:静态内容指令表达式小脚本<%Java代码%><%=Java表达式%>HTML静态文本以“<%@”开始,以“%>”结束。比如:<%@includefile="
Filename"%>声明<%!方法%>注释<!--这是注释,但客户端可以查看到--><%--这也是注释,但客户端不能查看到--%>JSP中的注释合理、详细的注释有利于代码后期的维护和阅读在JSP文件的编写过程中,共有三种注释方法:HTML的注释:<!--html注释-->JSP注释:<%--JSP注释--%>在JSP脚本中注释:<%//单行注释%><%/*多行注释*/%>缺点:不安全,加大网络传输负担小脚本与表达式在JSP页面中计算两个数的和,将结果输出显示<%@pagelanguage="java"import="java.util.*,java.text.*"contentType="text/html;charset=GBK"%><html> <head><title>计算求和</title></head> <body> 两个数的求和结果为: <% intnumA=4,numB=5; intresult=numA+numB; %> <%=strCurrentTime%> </body></html>指令小脚本表达式什么是声明声明就是在JSP页面中定义Java的变量和方法语法:<%!Java代码%><%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%><html>…….<body><%inta=1,b=2,sum=0;
sum=xx+add(a,b);out.print(sum);%><%!intxx=2;
intadd(intx,inty){returnx+y;}%></body></html>方法声明后可在页面中多处调用5.3JSP指令page指令通过设置内部的多个属性来定义整个页面的属性语法:<%@page属性1="属性值"属性2="属性值1,属性值2"…属性n="属性值n"%>page指令常用属性属性描述默认值language指定JSP页面使用的脚本语言javaimport通过该属性来引用脚本语言中使用到的类文件无contentType用来指定JSP页面所采用的编码方式text/html,ISO-8859-15.3JSP指令include指令用于将多个JSP页面(或者HTML、XML文件)组合起来,成为一个“完整”的JSP页面语法:<%@includefile="FileName"%><%@pagecontentType="text/html;charset=gb2312"%><html>……<body><!--header--><%@includefile="header.jsp"%>……<%@includefile="foot.jsp"%></body></html>5.4JSP动作所谓JSP动作(JSPAction),是在JSP中利用XML语法格式的标记来控制Servlet容器的行为。利用JSP动作可以动态地插入文件、调用JavaBean组件、把用户请求重定向到另外的页面、为Java插件生成HTML代码等。JSP动作包括:<jsp:include>:将其他页面的输出包含进来。<jsp:useBean>::获得一个JavaBean实例。<jsp:setProperty>:设置JavaBean的属性。<jsp:getProperty>:获得某个JavaBean的属性。<jsp:forward>:把请求转到一个新的页面。<jsp:plugin>:根据浏览器类型,为Java插件生成OBJECT或EMBED标记。5.4JSP动作include动作<jsp:includepage="includeFile"/>
这是一个XML语法结构,所以需要将这个标记结束。它的另外一种方式如下:<jsp:includepage="includeFile"></jsp:include>注意:和include指令不同的是,include动作将会在客户端对JSP文件发出请求的时候将对应包含文件的输出内容包含进来,这是include指令和include动作最大的不同。而且,它总是会检查被包含文件的变化,因此,不会再产生像include指令一样的主从文件不同步更新问题。5.4JSP动作forward动作
在JSP中,可以使用forward动作来实现程序的转向,例如,从begin.jsp转向到forward1.jsp可以在begin.jsp中使用forward动作:<jsp:forwardpage="forward1.jsp"/>
这样,当在begin.jsp中执行到forward动作的时候,它将会自动跳转到forward1.jsp。
另外,和include动作类似,forward动作也可以有子元素jsp:param,用于指定一个参数:<jsp:forwardpage="desFile"><jsp:paramname="paramName"value="paramValue"/></jsp:forward>5.5JSP内置对象JSP内置对象是Web容器创建的一组对象JSP内置对象的名称是JSP的保留字JSP内置对象是可以直接在JSP页面使用的对象,无需使用“new”获取实例<%
request.setCharacterEncoding("GBK"); StringtitleName=
request.getParameter("titlename");%>没有出现new关键字,但却可以使用request对象JSP内置对象常用的JSP内置对象常用内置对象requestresponseoutapplicationsessionOut内置对象是一个缓冲的输出流,用来给客户端返回信息。javax.servlet.jsp.JspWriter的一个实例例:<%@pagecontentType="text/html;charset=gb2312"%><HTML><HEAD><TITLE>out用法</TITLE></HEAD><BODY><%out.println("现在时间是:"+newjava.util.Date());%></BODY></HTML>JSP内置对象--outJSP内置对象--out常用方法:println():向客户端输出各种类型数据newLine():输出一个换行符close():关闭输出流flush():输出缓冲区里的数据clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端clear():清除缓冲区里的数据,但不把数据输出到客户端getBufferSize():返回缓冲区的大小JSP内置对象requestrequest对象主要用于处理客户端请求JSP页面request对象客户端请求请求信息JSP内置对象request方法名称
说明StringgetParameter(Stringname)根据页面表单组件名称获取页面提交数据String[]getParameterValues(Stringname)获取一个页面表单组件对应多个值时的用户的请求数据voidsetCharacterEncoding(Stringcharset)指定每个请求的编码,在调用getParameter()之前进行设定,可以解决中文乱码问题StringgetRemoterAddr()返回提交请求的客户机的IP地址request对象常用方法JSP内置对象responseresponse对象用于响应客户请求并向客户端输出信息response对象常用方法voidsendRedirect(Stringlocation):将请求重新定位到一个不同的URL,即页面重定向JSP页面response对象客户端响应从服务器中检索的信息存储信息,以在响应客户端请求时发送此信息<formname="form1"method=postaction="control.jsp">用户名:<inputtype="text"name="userName">密码:<inputtype="password"name="pwd"><inputtype="submit"value="登录"><form>JSP内置对象response根据业务逻辑实现页面跳转input.jsp客户端重新建立链接<%request.setCharacterEncoding("GBK");Stringname=request.getParameter("userName");Stringpwd=request.getParameter("pwd");if(name.equals("sa")&&pwd.equals("sa")) response.sendRedirect("welcome.jsp");%>跳转至欢迎页面control.jspJSP内置对象response页面实现跳转了,请求的信息是否也一起转移呢?演示示例:页面跳转后获取请求信息那么如何才能实现页面跳转后,请求信息不丢失呢?使用转发取代重定向实现页面跳转页面的转发转发的作用:在多个页面交互过程中实现请求数据的共享转发的实现:RequestDispatcher对象forward()方法<%RequestDispatcherrd=request.getRequestDispatcher("welcome.jsp");rd.forward(request,response);%>将当前接收的用户请求,发送给服务器的其他资源使用演示示例:页面跳转后获取请求信息转发与重定向的比较转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传递。转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址重定向是在客户端发挥作用,通过请求新的地址实现页面转向重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址JSP内置对象sessionsession对象用来存储有关用户会话的所有信息session对象常用方法:类型方法名称说明voidsetAttribute(Stringkey,Objectvalue)以key/value的形式保存对象值ObjectgetAttribute(Stringkey)通过key获取对象值intgetMaxInactiveInterval()获取session的有效非活动时间,以秒为单位StringgetId()获取session对象的编号voidinvalidate()设置session对象失效JSP内置对象-applicationapplication对象是一个对web应用有效的全局变量常用方法:getAttribute()/setAttribute()log()例5-12:application的log()方法应用源文件:appLog.jsp<%@pagepageEncoding="gb2312"%><html><head><title>保存日志</title></head><body><%StringclientIp=request.getRemoteAddr();application.log("访问本网站的客户IP为:"+clientIp);%>
客户IP已经保存到日志中
</body></html>exception对象exception对象是Throwable的实例,表示的是JSP的异常信息如果要使用它,必须将对应的JSP的page指令的isErrorPage属性设置成truepageContext对象是PageContext类型的对象可以使用这个对象来管理其他的隐含对象JSP内置对象的范围对象的范围范围决定了JSP是否可以进行对象访问范围的分类名称说明page范围在一个页面范围内有效,通过pageContext对象访问该范围内的对象request范围在一个服务器请求范围内有效,与客户端请求绑定一起session范围在一次会话范围内容有效,在会话期间与session绑定的对象皆属于该范围application范围在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享演示示例:对象范围的测试5.6JSP与ServletJSP和Servlet的关系5.6JSP与ServletJSP和Servlet的交互
1、JSP跳转到Servlet
<jsp:forwardpage=”/Servlet1”/>
2、Servlet跳转到JSP
forward()方法
sendRedirect()方法5.7在JSP中使用JDBC访问数据库例5-14:在JSP中显示Students表中所有记录(1)配置JDBC数据库开发环境:把JDBC数据库驱动程序拷贝到项目的WebRoot/WEB-INF/lib目录下。(2)创建数据库连接类:在项目的src目录下创建包:com.csmy.db,在com.csmy.db包中创建数据库连接类:Dbconn.。Dbconn类代码请参考第三章的例3-1(把例3-1的Dbconn类中的代码全部拷贝过来就可以了)。(3)创建数据库访问类:在com.csmy.db包中创建数据库访问类Dao,并在该类中添加查询所有学生信息的方法GetAllStustents()(4)创建数据浏览页面Students.jsp(5)运行:发布项目。在浏览器中输入::8080/JspTest/Students.jsp。下图是Students.jsp运行结果。补充:Web程序的调试与排错在运行Web程序时,常犯的一些错误有:未启动Tomcat服务,或者没有在预期的端口中启动Tomcat服务未部署Web应用,就试图运行Web程序运行时,URL输入错误存放文件的目录无法对外引用,如:文件放入了WEB-INF、META-INF等文件夹错误1:未启动Tomcat排除错误:启动Tomcat服务如果控制台上显示Tomcat服务已启动,观察端口号是否与预期端口号一致,按照实际端口号重新运行错误现象排错方法:检查Tomcat服务能否正确运行123错误2:未部署Web应用排除错误:部署Web应用排错方法:检查Web应用是否正确部署尚未部署错误现象123错误3:URL输入错误排除错误:使用正确的URL错误现象排错方法:检查URLhttp://localhost:8080/news/index.html文件名称与路径要写对协议主机IP地址123错误4:目录不能被引用排除错误:把index.html文件拖至WebRoot文件夹下错误现象排错方法:检查文件的存放位置META-INF,WEB-INF文件夹下的内容无法对外发布1235.8实用案例-导出电子表格将数据库数据导出到电子表中5.8实用案例-分页显示分页显示在JSP中执行一条SQL语句时,可能返回多条记录,如果将所有的记录一次显示在同一页面,不仅效率低而且不易查阅,通常采用分页显示来解决这个问题。通常而言,可以采用两种策略来实现数据浏览的分页:基于缓存和基于查询。1.基于缓存的分页策略
基于缓存(Cache-Based):这种方式一次性的将所有的记录取出来放到session或者其他的缓存机制中。这种方式的优点是:除了第一页外,后续的页面都能够很快访问到需要的数据。缺点是:第一页显示的时候可能很慢,因为需要等待取出所有的数据,而如果数据量比较大的话,比较慢。还有一个缺点是因为数据取出来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农产品电商云仓项目可行性研究报告
- 口腔小肿物切除规范化操作培训
- 无人机飞手风险识别与管控方案
- 社区居民常态化急救培训实施方案
- 市政管网更新项目文明施工方案
- 基层医疗机构儿童意外伤害应急处置规范
- 夜间施工管网工程文明施工方案
- 土石方工程渣土资源化利用可行性报告
- 旧厂区绿电供能项目可行性研究报告
- 老旧供热管网阀门更换项目可行性研究报告
- (2026版)E6(R3)药物临床试验质量管理规范实施课件
- 航天科工集团智能院2026届校园招聘笔试备考试题及答案解析
- 中国康复医学质量控制指南(2025版)
- 《民航客舱设备与操作》课件-4.客舱应急设备(双语)
- 初中物理实验设计AI评价系统稳定性与实验创新能力提升路径研究探讨教学研究课题报告
- 新感觉派课件
- 2026年建设工程造价(通信工程计价)自测试题及答案
- 92DQ13 防雷与接地装置图集
- 苏州市吴江区“厂中厂”安全生产整治攻坚行动指导手册
- TD/T 1023-2010市(地)级土地利用总体规划编制规程
- 设备拆卸和安装合同协议
评论
0/150
提交评论