Java Web应用开发项目教程 课件 第十二章 JSP技术_第1页
Java Web应用开发项目教程 课件 第十二章 JSP技术_第2页
Java Web应用开发项目教程 课件 第十二章 JSP技术_第3页
Java Web应用开发项目教程 课件 第十二章 JSP技术_第4页
Java Web应用开发项目教程 课件 第十二章 JSP技术_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaWeb应用开发计算机与软件学院第12章JSP技术■本章要点:

JSP基本语法静态包含与动态包含隐藏对象Cookie对象Session对象JDBC的实现12.1

JSP语法JSP的全称是JavaServerPage(Java服务器页面)。JSP是由Sun公司倡导、许多其他公司参与建立的一种动态网页技术标准。JSP页面从形式上来看是在传统的网页HTML文件中加入Java程序片段和JSP标签。Servlet/JSP容器收到客户端发出的请求时,会执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。12.1

JSP语法JSP与HTML、Servlet的不同静态HTML页面的请求过程:当用户请求访问http://.../hello.htm,Web服务器会读取本地文件系统中的hello.htm文件中的数据,把它作为响应的正文发送给用户的浏览器。htm(或html文件)文件事先已经存储于web服务器端的文件系统中,无论客户请求多少次这个文件,都会得到相同的内容,也正因此称之为“静态”。12.1

JSP语法Servlet通过Java程序代码来读取客户端的请求参数,通过PrintWriter对象向客户端发送动态生成的HTML标签和数据。随着客户端不同的请求,Servlet类产生的HTML代码不同,发送给客户端的响应页面内容也就不同。12.1

JSP语法在传统的HTML文件中加入Java程序片段和JSP标记,就构成了JSP文件。从形式上看JSP更接近HTML页面,它能够和HTML文件一样,直接表达网页的外观。但JSP页面和HTML页面有本质的区别,HTML文档是静态文档(内容是不会变化的),而JSP和Servlet一样,都能动态生成HTML文档。12.1

JSP语法JSP指令JSP指令语法形式为:<%@指令名

属性1=“属性值”属性2=“属性值”…%>,常用的指令有三种:page、include、taglib。Page指令用于指定编程语言、编码方式和导入的软件包等page指令的属性12.1

JSP语法JSP指令page指令的属性12.1

JSP语法JSP声明在<%!%>内声明与JSP对应的Servlet类的成员变量和方法。声明语法块会被翻译到Servlet的类体中,即service()方法外面。所以声明块中不能直接编写Java语句,除非是变量的声明;JSP声明语法块中的代码会按照先后顺序被翻译到Servlet类体中。JSP声明对应的Servlet

12.1

JSP语法Java表达式Java表达式的语法为<%=%>,使用它可以将表达式的值输出到网页上,即可以将java变量/表达式的值嵌入到网页文本中。语法:<%=变量或表达式%>例如:<%=newDate()%>JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应的位置用out.print()将数据输出给客户端,上面的的例子会翻译成out.print(newDate());。12.2

静态包含与动态包含静态包含与动态包含静态包含在JSP文件中可以使用include指令来包含其他文件的内容,被包含的文件可以是HTML也可以是JSP。语法形式为:<%@includefile=“目标页面的URL”%>静态包含发生在解析JSP源文件的阶段,被包含的目标文件内容会被原封不动地添加到JSP源文件中,然后再对融合过的JSP源文件进行翻译和编译。如果客户端访问a.jsp的时候,服务器一定会检查a.jsp是否是发生了修改,是否需要重新的翻译和编译。但是不一定会检测被包含的b.jsp是否发生了变化,因此如果b.jsp发生了变化,最好要经过重新的翻译和编译过程,才能保证结果是最新的。因此静态包含主要用于包含不常发生变动的页面。12.2

静态包含与动态包含静态包含与动态包含动态包含使用include操作可以包含静态或者动态文件,如果包含进来的是动态文件,这个被包含的动态文件也会被JSP容器执行。语法形式为:

<jsp:includepage=“目标页面url”>动态包含发生在运行JSP对应的servlet类的阶段,被包含的JSP目标文件的响应结果被包含到JSP源文件的响应结果中。在servlet中,相当于此句:request.getRequestDispatcher(“目标url").include(request,response);。12.2静态包含与动态包含

无论是静态还是动态include,源组件和被包含组件,均使用同一个request对象和response对象。源组件请求中存储的参数和属性,目标组件中均能得到。静态包含中,被包含组件的代码都被融合在源组件代码中,最终产生一个servlet源文件,两者的代码均在servlet的sevice方法中,自然是共用方法的参数request和response。而动态包含,在调用被包含组件的service方法时,把源组件的request和response对象也传递给了service(类似forward),因此两者也是共用request和response。静态包含中,源组件和被包含组件不能有同名变量(块级变量除外),因为它们最终都在同一个service方法里,方法里的局部变量不能重名。12.3隐藏对象简单的说,JSP中的隐含对象,就是无需定义,就可以在JSP文件中直接使用的那些对象,例如request。下面是一个普通的JSP页面文件,该文件被第一次访问时,Web服务器将对其进行转译,将它翻译成一个servlet类。12.3隐藏对象JSP的隐藏对象12.4

Cookie对象如何在用户首次访问网站的任一组件时,给用户一个唯一的id?当用户后续访问此网站下其它组件时,如何保证浏览器把这个id号提交给服务器?为了维护用户和用户行为之间的关联性,主要有下面几种方法:URL重写技术、隐藏表单技术、Cookie技术。12.4

Cookie对象URL重写技术将会话信息以请求参数的形式嵌入到服务器发出的每个超链接中。这样每次用户点击超链接的时候,都会把这个参数发给服务器,服务器就能区分用户了。为了保持URL的简洁,通常这个嵌在URL中的会话信息是一个由服务器生成的代表客户的唯一性的ID号,在URL的表现形式上,它通常是作为URL请求参数的形式出现的,如:

http://.../servlet/Rewritten?sessionid=67888URL重写技术的优点:用户是匿名的;在Web服务器实现上得到普遍的支持。URL重写技术的缺点:由于会话信息作为查询参数在URL上是可见的,因此会话存在一定的安全隐患;需要对所有动态生成的URL进行重写,代码比较繁琐;只能用于动态产生的文档如Servlet和JSP页面,而不能用于HTML文档。12.4

Cookie对象隐藏表单技术HTML表单允许把一些字段信息隐藏起来,而在浏览器上不被显示出来,但是当表单提交时,这种隐藏表单元素的信息可以被作为参数提交。<inputtype=“hidden”name=“***”value=”…”>将用户的会话信息(例如唯一的ID号)写在隐藏表单里,用户看不见,但是当表单提交时,信息会作为参数提交给服务器。服务器可以利用request对象的getParameter()方法读取出来。同重写URL技术相比,隐藏表单技术是利用表单来传递会话信息,而URL重写技术是使用GET请求参数来传递会话信息(例如超链接)。除了这点,二者并无根本区别。它们都属于非持久化会话方案,都使用页面动态修改技术,因此不支持静态HTML,代码编写方式很相似。12.4

Cookie对象Cookie技术Cookie可以随着请求和响应在浏览器和服务器之间传递。在首次访问Web服务器资源时,服务器将Cookie连同响应发送到客户端保存起来。客户端再次访问同一个Web服务器时,主动查找与服务器匹配的Cookie并随请求发往服务器。服务器根据Cookie决定响应。服务端使用下面语句创建Cookie,并把Cookie添加到响应中,发往客户端浏览器。

Cookiecookie=newCookie(“cookie名”,“cookie值”);

response.addCookie(cookie);当浏览器再次访问该网站时,浏览器会将此网站的Cookie随着请求发送给网站服务器(访问百度/搜狐时把百度/搜狐Cookie发给百度服务器),浏览器会找到对应的Cookie进行发送。12.4

Cookie对象Cookie的传递形式Cookie属性12.4

Cookie对象使用Cookie维护会话的工作过程如下:1.用户第一次访问某网站时,服务器生成一个Cookie,格式为:“Cookie的名字:客户的ID号”,并把这个Cookie随着响应发送给客户端。例如:baidu:13f4a4b4c21b2.客户端浏览器存储该Cookie,当用户再次访问同一个Web服务器时,浏览器会检查本地的Cookie,并将其原样发送给Web服务器。3.服务器从客户发回的Cookie中取出客户ID号,并以此为索引获得该客户的会话信息,并进行维护处理。12.4

Cookie对象利用Cookie维护会话的优点有:目前大多数浏览器都可以识别和处理来自Web服务器的Cookie,因此兼容性较好。因为Cookie可以保存在客户端的小文件中,因此Cookie支持持久性的维持会话信息,哪怕浏览器关闭也可以维护。利用Cookie维护会话的缺点有:Cookie的名声不太好,个别网站可能在用户不知情的情况下采集客户个人信息。用户可以禁用Cookie。12.5

Session对象URL重写、隐藏表单、Cookie,都需要程序员进行大量的程序编写,比较繁琐。ServletAPI规范定义了一个HttpSession接口,允许Servlet容器针对每一个会话建立一个HTTP会话对象(即HttpSession对象),该会话对象将会自动被赋予一个唯一的“会话编号”(sessionID),而无需程序员编程实现。同时,HttpSession对象提供了一组存取会话属性的方法,这样就可以很容易的在服务器端存放用户会话状态。12.5

Session对象Session对象与Cookie的联系内置对象session和cookie的联系为:session对象由servlet容器自动创建,并赋予一个唯一的编号。这个编号随着一个名为“JSESSIONID”的Cookie发送给客户端。如图所示。session对象的生命周期和作用范围和名为“JSESSIONID”的Cookie紧密联系在一起。服务器根据Cookie查找Session对象,如图所示。通过ID号123456找到Session对象-A,通过ID号654321找到Session对象-B。12.5

Session对象Session对象的生存期session对象默认的过期时间是1800秒,也就是30分钟。过期指的是连续n分钟没有访问过应用内的任意组件。超过这个时间后,服务端的session对象会被销毁。可以为session对象设置过期的时间,下面代码设置为30秒,只要客户端有30秒钟未访问该应用的任何组件,session过期,服务器会销毁该session对象。session.setMaxInactiveInternal(30);与Session对象关联的JSSESSIONIDcookie是存于浏览器进程中的(maxAge=-1),浏览器关闭就会失效。如果浏览器重启后,再访问同一服务器,将不会发送此cookie。12.5

Session对象Session对象的重建session对象重建的场景有浏览器关闭导致session对象重建和session过期重建。当浏览器首次访问服务器时,未携带任何cookie,服务器为其生成一个JSESSIONID为123456的cookie,并通过response对象返回给浏览器。当重启浏览器,浏览器端保存的JSESSIONID没有了,123456Session对象还在服务器,但是由于客户端丢失了id,已经无法找到匹配的cookie,造成session需要重建。服务器发现请求里没有JSESSIONIDcookie,认为这是首次访问的新会话,又创建了一个新session对象,并赋予一个新id65432112.5

Session对象当用户n分钟没有访问过应用的任何页面,Session会过期重建。如图所示。当浏览器首次访问服务器时,未携带任何Cookie,服务器为其生成一个JSESSIONID为123456的Cookie,并通过response对象返回给浏览器。当用户n分钟没有访问过应用的任何页面后,服务器发现请求里的id号123456,但是这个id号对应的seesion对象已经不存在了,又创建了一个新session对象。12.5

Session对象向HttpSession对象中存取属性在servlet中,可以使用HttpServletRequest对象获得HttpSession对象。publicvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse){

HttpSessionsession=request.getSession();}在JSP页面中可以直接使用session对象,该session对象就是HttpSession的一个实例。可以用setAttribute方法和getAttribute方法在session对象中存取属性,存入session对象中的属性,可以在会话范围内被共享。使用setAttribute向session中存储属性(attribute)。

session.setAttribute(“c”,newCircle(5));使用getAttribute从session中按属性名取得属性值:Circlecircle=(Circle)session.getAttribute(“c”);12.6

隐含对象request对象12.6隐含对象response对象12.6隐含对象response对象12.6隐含对象application对象12.6隐含对象pageContext对象12.7

JDBCJDBC,全称为JavaDataBaseConnectivity,它是一个面向对象的应用程序接口(API),是由Java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBCAPI,并支持SQL语言。利用JDBC可以将JAVA代码连接到Oracle、DB2、SQLServer、MySQL等数据库,从而实现对数据库中的操作。12.7

JDBCJDBCAPIJDBC中常用类和接口有连接到数据库(Connection)、建立操作指令(Statement)、获得查询结果(ResultSet)等。驱动程序管理类(DriverManager):DriverManager类是JDBC的管理类,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。不同的数据库(sqlserver2000,Sqlserver2005,Oracle,mysql,Sybase等)驱动不同,由数据库厂商提供,

DriverManager加载驱动的代码也有区别。Connectioncon=DriverManager.getConnection(url,"sa","123");12.7

JDBC常见数据库驱动字符串12.7

JDBC数据库连接类(Connection):Connection对象代表与数据库的连接。连接过程包括所执行的SQL语句和在该连接上返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与很多数据库有连接。与数据库建立连接的标准方法是调用DriverManager.getConnection()方法。Stringurl="jdbc:mysql://:3306/E-Store";Stringuser="root";Stringpassword="root";DriverManager.getConnection(url,user,password);12.7

JDBCConnection类常用方法12.7

JDBCDriver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。常见的连接字符串如表所示。user是数据库用户名,password为用户的密码。12.7

JDBC声明类(Statement):Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,它们都作为在给定链接上执行SQL语句的包容器:Statement、PreparedStatement(它从Statement继承而来)和CallableStatement(它从PreparedStatement继承而来)。它们都专用于发送特定类型的SQL语句:(1)Statement对象用于执行不带参数的简单的SQL语句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论