




已阅读5页,还剩119页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章JavaEEWeb开发,(学时数:10学时),学习要点:,1.熟悉JavaEEWeb开发中的常用技术。2.熟悉JavaEE中常用的Web容器。3.了解JavaBean的概念及属性。4.掌握JavaServlet原理。5.掌握JavaServlet生命周期。6.能使用JavaServlet来处理典型的Web应用问题。7.掌握JSP原理。8.能使用JSP编写程序。9.能使用JSP来处理典型的Web应用问题10.掌握常见JSP动作和指令11.掌握常见的一些编码问题12.熟悉标签库及其在JSP中的使用13.掌握在JSP中访问数据库14.熟悉一个完整的JavaEEWeb应用架构,第五章JavaEEWeb开发,5.1JavaEE中的Web技术概述5.2Web容器5.3JavaBeans简介5.4JavaServlet原理5.5JavaServlet生命周期5.6用JavaServlet来处理典型的Web应用问题5.7JSP原理5.8编写第一个JSP5.9用JSP来处理典型的Web应用问题5.10常见JSP动作和指令5.11专题:编码问题5.12标签库及其在JSP中的使用5.13在JSP中访问数据库5.14一个完整的JavaEEWeb应用架构,JavaEE中的Web技术概述,在Web层面上,经常使用到的技术包括Servlet开发,过滤器、兼听器开发,以及JSP技术原理,标签库的开发、JSTL的使用和表达式语言的使用。下面将对这些技术进行详细阐述。,JavaEE中的Web技术概述,1.Servlet开发Servlet(Java服务器小程序)是用Java编写的服务器端程序,是由服务器端调用和执行的按照Servlet自身规范编写的Java类。Servlet给开发人员的最大好处是它可以处理客户端传来的HTTP请求,并返回一个响应。Servlet是一个Java类,Java语言能够实现的功能Servlet基本上都能实现(除了AWT/Swing图形界面外)。,JavaEE中的Web技术概述,2.JSP技术JSP代表JavaServerPages,它是一种服务器端动态页面技术。它建立在Servlet技术之上,拥有Servlet技术的所有优点,同时它还具有容易编写的特点,这使得JSP非常快地得到了普及。在JSP文件里,主要由模板元素、指令元素、动作元素、脚本元素、声明、表达式、Scriptlets、表达式语言和JSP内置对象组成。,JavaEE中的Web技术概述,Servlet监听器和过滤器在Web应用中,除了驻留了常规的Servlet和JSP外,还可以部署一些用于完成额外功能的Servlet,它们就是过滤器和监听器。过滤器用于对请求进行过滤,监听器用于监听ServletContext、HttpSession和请求等对象的创建或者改变。过滤器和监听器可以为Web应用提供一些辅助的功能。,JavaEE中的Web技术概述,自定义标签库的开发从JSP1.1开始,就增加了标签库的支持,后来标签库在JSP1.2和JSP2.0中得到了不断增强。简单地讲,标签扩展是一个Java类,它是运行一个或者两个接口的JavaBean,标签具有比JavaBean更丰富的运行时(Runtime)协议。它不仅可以非常紧密地和JSP的表示逻辑联系在一起,同时它也具有和普通JavaBean相同的业务逻辑处理能力。,JavaEE中的Web技术概述,JSTL标准标签库从JSP2.0起,JSTL就作为标准的支持,JSP的标准标记库core库为一些基本功能(如管理限定了作用域的变量和与URL交互等)和基本操作(如迭代和条件化)提供了定制标记。这些标记不仅可以由页面设计人员直接利用,而且还为与其它JSTL库相结合提供更复杂的表示逻辑奠定基础。,JavaEE中的Web技术概述,表达式语言表达式语言最初在JSTL1.0中提出,在JSP2.0中它作为一种标准的支持,并且增加了新的特性。表达式语言可以和JSTL结合使用,也可以和Scriptlets结合使用。使用表达式语言可以简化在JSP开发中对对象的引用。,Web容器,在JavaEE5.0规范中,web容器定义了web程序的运行时环境,包括:并发性、安全性、生命周期管理等等。容器就是一个实现了这个协议的服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求。常用的JavaEE应用web容器有以下几种:,Web容器,1.TomcatTomcat是Jakarta项目中的一个重要的子项目,被JavaWorld杂志的编辑选为2001年度最具创新的java产品,同时它又是sun公司官方推荐的Servlet和JSP容器,越来越多地受到软件公司和开发人员的喜爱。Servlet和JSP的最新规范都可以在Tomcat的新版本中得到实现。其次,Tomcat是完全免费的软件,任何人都可以从互联网上自由地下载。,Web容器,Tomcat中的应用程序是WAR文件。WAR包中的文件按一定目录结构来组织:根目录下包含Html和JSP文件或者这两种文件的目录,另外还有一个WEB-INF目录,在WEB-INF目录下有web.xml文件和classes目录,web.xml是应用配置文件,classes目录则包含编译好的Servlet类和JSP或Servlet所依赖的其它类(如JavaBeans)。通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便。,Web容器,在Tomcat中,应用程序的部署很简单,您只需将WAR放到Tomcat的webapps目录下,Tomcat会自动检测这个文件,并将其解压。您在浏览器中访问这个应用的JSP时,通常第一次会很慢,因为Tomcat要将JSP转化为Servlet文件,然后编译。编译后访问将很快。另外Tomcat也提供了应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,您可以在远程通过Web部署和撤销应用。当然本地也可以。,Web容器,Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理JSP和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。,Web容器,2.JBossJBoss是发展最迅速的J2EE应用服务器。JBoss是免费开源的J2EE的实现,通过LGPL许可证发布,这使得JBoss广为流行。Jboss是运行EJB的J2EE应用服务器,例如:数据库访问JDBC、交易(JTA/JTS)、消息机制(JTS)、命名机制(JNDI)和管理支持(JMX)。它是开放源代码的项目,遵循最新的J2EE规范。,Web容器,目前的JBoss发布版2.2.4实现了EJB1.1和部分EJB2.0的标准、JMS1.0.1、Servlet2.2、JSP1.1、JMX1.0、JNDI1.0、JDBC1.2和2.0扩充(支持连接池(ConnectionPolling)、JavaMail/JAF、JTA1.0和JAAS1.0标准,JBoss是100%纯Java实现能运行于任何平台。,Web容器,从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于J2EE的一个web操作系统(operatingsystemforweb),它体现了J2EE规范中最新的技术,并且它还在theJavaWorldEditorsChoice2002评选中获得“最佳Java应用服务器”大奖。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。另外,JBoss应用服务器还具有许多优秀的特质:,Web容器,它将具有革命性的JMX微内核服务作为其总线结构;它本身就是面向服务的架构(Service-OrientedArchitecture,SOA);它还具有统一的类装载器,从而能够实现应用的热部署和热卸载能力。,Web容器,3.WebLogic基于JAVA功能强大的电子商务套件,提供了许多功能强大的中间件用,可以为企业提供完整的商务应用解决方案。BEAWebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和JavaEnterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。,Web容器,BEAWebLogicServer拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性。与BEAWebLogicCommerceServerTM配合使用,BEAWebLogicServer可为部署适应个性化电子商务应用系统提供完善的解决方案。BEAWebLogicServer具有开发和部署关键任务电子商务Web应用系统所需的多种特色和优势,包括:,Web容器,3.WebLogic基于JAVA功能强大的电子商务套件,提供了许多功能强大的中间件用,可以为企业提供完整的商务应用解决方案。BEAWebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和JavaEnterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。,Web容器,领先的标准无限的可扩展性快速开发部署更趋灵活关键任务可靠性体系结构,Web容器,4.WebSphereWebSphere是因特网的基础架构软件,也就是我们所说的中间件。WebSphere应用服务器是一个Web应用服务器(内含IBMHttpServer),本质上是适合于Servlet的Web服务器插件,提供了增强的ServletAPI和Servlets管理工具,并集成了JSP技术和数据库连接技术。,Web容器,通过使用Servlet、JSP以及XML,快速地将静态Web站点转换为富有勃勃生机的动态站点。包含高性能企业级JavaBean组件的服务器。集成EJB和CORBA技术,为构建流量高、容量大的电子商务应用提供可靠的保证。WebSphere产品家族是IBM电子商务软件工具战略的核心,企业应用平台的首选。,Web容器,5.Apusic金蝶ApusicJavaEE应用服务器是全球第四家通过JavaEE最高规范5.0认证的产品,完全实现JavaEE企业计算相关的工业规范及标准,Apusic5.0提供了对数据持久性、事务完整性、消息传输可靠性、集群高可用性以及跨平台的支持,具备国际品质,是为各种复杂应用系统提供标准、安全、集成、高效的企业级基础中间件平台。,Web容器,5.Apusic除了实现JavaEE5规范所要求的全部特性之外,Apusic5.0还在web应用开发的易用性方面下了不少工夫,并且对中国特色的电子政务系统加以特别支持。再加上本土得天独厚的技术支持和交流上的优势,专家评价金蝶Apusic是“最贴近中国应用水平和需求现状”的应用服务器中间件。其产品特性如下:,Web容器,微内核体系JavaEE5的完整支持Web容器EJB容器WebService的支持JSF引擎可管理性集群服务集成式开发工具的支持本地化服务,JavaBeans简介,1.JavaBeans的概念JavaBeans是一个可以复用软件模型。JavaBeans在某个容器中运行提供具体的操作性能。JavaBeans是建立应用程序的建筑模块,大多数常用的JavaBeans通常是中小型控制程序,也可以编写包装整个应用程序运行逻辑的JavaBeans组件并将其嵌入到复合文档中,以实现更为复杂的功能。,JavaBeans简介,一般来说JavaBeans可表示为简单的GUI组件,按钮、游标菜单等。这些组件告诉用户什么是JavaBeans,但也可以编写不可见的JavaBeans用于接受事件和在幕后工作,例如访问数据库、执行查询操作的JavaBeans,它们在运行时不需要任何可视的界面。在JSP程序中所用的JavaBeans一般以不可见的组件为主,可见的JavaBeans一般用于编写Applet程序或者Java应用程序。,JavaBeans简介,JavaBeans组件模型使得软件可以设计成便于修改和便于升级。2.JavaBeans的属性:JavaBeans的属性与一般Java程序中所指的属性或者说与所有面向对象的程序设计语言中对象的属性是同一个概念,在程序中的具体体现就是类中的变量。在JavaBeans的设计中按照属性的不同作用又细分为以下4类。,JavaBeans简介,Simple属性一个Simple类型的属性表示一个伴随有一对getXXX()、setXXX()方法的变量属性的名称,与和该属性相关的getXXX()、setXXX()方法相对应。例如如果有setX()和getX()方法则暗指有一个名为“X”的属性,如果有一个方法名为isX(),则通常暗指“X”是一个布尔类型的属性。,JavaBeans简介,Indexed属性一个Indexed类型的JavaBeans属性表示一个数组值,使用与该属性相对应的setXXX()方法和getXXX()方法可以存取数组中某个元素的数值,同时我们也可以使用另两个同名方法一次设置或取得整个数组的值(即属性的值)。,JavaBeans简介,Bound属性Bound类型的JavaBean属性具有的特性:当该种属性值发生变化时必须通知其它的JavaBeans组件对象。每次JavaBeans组件对象的属性值改变时,引发PropertyChange事件(在Java程序中事件也被看作是一个对象)。事件中封装属性改变事件的属性名、属性原值、属性变化后的新值。这个事件将被传递到其它的JavaBeans组件中,接收事件的JavaBeans组件对象应该做什么动作由其自己定义。,JavaBeans简介,Constrained属性JavaBeans组件的Constrained类型的属性具有这样的性质:当这个属性的值将要发生变化但是还没有发生变化时,与这个属性已经建立了某种监听关系的其它Java对象可以否决属性值的改变。此Constrained类型的属性的事件监听者对象将会通过抛出PropertyVetoException异常事件来阻止该属性值的改变。,5.4JavaServlet原理,5.4.1Servlet概述Servlet(Java服务小程序)是用Java编写的服务器端程序,是由服务器端调用和执行的任何Java类。Servlet是使用JavaServlet应用程序设计接口(API)及相关类和方法的Java程序。除了使用JavaServletAPI,Servlet还可以使用用于扩展和添加到API的Java类软件包。Servlet是一种采用Java技术来实现CGI功能的一种技术。Servlet本身与协议无关,与平台也无关。浏览器端也就是客户端运行的Java程序叫做Applet,而服务器端运行的Java程序叫做Servlet。Servlet看起来像是通常的Java程序。Servlet导入特定的属于JavaServletAPI的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。,5.4.1Servlet概述,基本Servlet程序图,5.4.1Servlet概述,使用Servlet的基本流程客户端(很可能是Web浏览器)通过HTTP提出请求。Web服务器接收请求并将其发给Servlet。如果这个Servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。Servlet将接收HTTP请求并执行某种处理。Servlet将向Web服务器返回应答。Web服务器将从Servlet收到的应答发送给客户端。,5.4.2Servlet功能,Servlet能够完成以下几种功能:读取客户发送的显式数据。读取由浏览器发送的隐式请求数据。生成结果。向客户发送显式数据(即文档)。发送隐式的HTTP响应数据。对特殊的处理采用MIME类型过滤数据。将定制的处理提供给所有服务器的标准例行程序,Servlet可以修改如何认证用户。,5.4.3Servlet结构,JavaServlet的两个软件包组成了Servlet的结构,即javax.servlet和javax.servlet.http。JavaServlet结构的核心部分是javax.servlet.Servlet接口,它提供了所有Servlet的框架结构。Servlet接口提供了5种方法,其中3个最重要的方法是init()方法、service()方法和destroy()方法。,5.4.4编写第一个Servle,编写Servlet需要注意的几点:它是常规的Java代码。它有我们熟悉的重要语句。Servlet和JSPAPI不属于Java2平台标准版(Java2PlatformStandardEdition,J2SE);它们是单独的规范(同时也属于Java2平台企业版J2EE)。它对标准类(HttpServlet)进行了扩展。Servlet为应付对HTTP提供大量的基础结构。它覆盖(override)了doGet方法。Servlet用不同的方法响应不同类型的HTTP命令。,5.4.5准备工作,在进行Servlet开发前,首先要安装好开发Servlet的基本环境。开发Servlet所需要的基本环境是JSWDK以及一个支持Servlet的Web服务器。安装Servlet开发工具:JavaServerWebDevelopmentKit(JSWDK)安装支持Servlet的Web服务器:ApacheTomcat,JavaServerWebDevelopmentKit(JSWDK),AllaireJRun,ServletExec,LiteWebServer(LWS),JavaWebServer,5.4.6编写Servlet类,有关Servlet程序的说明如下:基于HTTP协议的Servlet必须引入javax.servlet和javax.servlet.http包。RequestInfoExample从类HttpServlet派生,HttpServlet是GenericServlet的一个派生类,通过GenericServlet实现了Servlet界面。HttpServlet为基于HTTP协议的Servlet提供了基本的支持。HttpServletRequest对象包含了客户端请求的信息,可以通过该参数取得客户端的一些信息以及HTTP请求类型。HttpServletResponse对象用于完成Servlet与客户端的交互。通过调用HttpServletResponse.getOutputStream(),客户取得向客户端进行输出的输出流,向客户端发送HTML页面。编写了doGet方法。,5.4.7编译Servlet类,对Servlet代码进行编译,其命令行为:javac是编译命令,它把RequestInfoExample.java编译成RequestInfoExample.class。进行编译时必须确保RequestInfoExample.java文件的文件的路径是正确的。由于ServletAPI不是J2SE平台的核心部份,因此在编译Servlet之前,需要将它加入CLASSPATH之中。除此之外,编译Servlet代码非常接近其他Java开发的编译过程。,5.4.8创建Web应用,一个Web应用是诸如HTML、图像之类的静态内容,Servlet以及其他可以通过Web接口访问的资源的集合。把RequestInfoExample.java编译生成的RequestInfoExample.class存放在Tomcat根目录下的一个文件夹,命名为webapps/ServletTest/WEB-INF/classes/RequestInfoExample.class。这样就已经创建好了一个Web应用。接下来我们还需要编辑Tomcat的一个配置文件,这样,Tomcat才知道这个新的Web应用。这个内容称为配置Web应用上下文。,5.4.9将Servlet装配到Web应用,Web应用必需的部份是web.xml文件,该文件描述了Web应用的不同部份。它位于每个Web应用的标准目录中,通常存贮为WEB-INF/web.xml。现在应该为新应用创建一个web.xml文件了,并希望外面的世界可以访问Servlet。Servlet的路径是相对于Web应用的路径的,因此该Servlet的全路径将是http:/localhost:8080/RequestInfoExample。,5.4.10配置Web应用上下文,在webapps目录中建立了名为ServletTest的新目录,需要编辑Tomcat的一个配置文件。这样,Tomcat才知道这个新的Web应用。使用文本编辑器打开文件conf/server.xml。在该文件中,Web应用被称为上下文(Context)。使用滚动条,找到标签,添加一个标签。这些步骤的是将进来的HTTP请求映射到特定目录中的Web应用。,5.4.11部署Web应用,部署Servlet的方法:复制成快捷方式或符号链接使用javac的-d选项由IDE完成部署工作使用Ant或类似工具,5.4.12访问Web应用,打开浏览器,浏览http:/localhost:8080/ServletTest/RequestInfoExample,就可以测试以前的工作了。其中localhost是安装有Tomcat的机器,8080是端口号。,5.4.13小结,Servlet(Java服务小程序)是用Java编写的服务器端程序,是由服务器端调用和执行的任何Java类。Servlet能够完成以下几种功能:读取客户发送的显式数据、读取由浏览器发送的隐式请求数据、向客户发送显式数据(即文挡)、发送隐式的HTTP响应数据、对特殊的处理采用MIME类型过滤数据、将定制的处理提供给所有服务器的标准例行程序,Servlet可以修改如何认证用户。JavaServlet的两个软件包组成了Servlet的结构:即javax.servlet和javax.servlet.http。,5.4.13小结,安装、编译和运行一个简单Servlet的过程如下:配置环境变量境编译Servlet源代码安装Servlet调用Servlet,5.4.14实例一,演示了一个ServletExample.java的实例。例子演示Servlet接收一个表单请求并将该请求中的数据显示出来。目的在于让读者能更深刻地了解Servlet的基本结构和方法,熟悉Servlet的一些内嵌对象。,5.4.14实例一,启动Tomcat,然后在浏览器中输入http:/localhost:8080/ServletExample。,5.5JavaServlet的生命周期,5.5.1Servlet生命周期介绍Servlet的生命周期可以归纳为以下几点:装载Servlet创建一个Servlet实例。调用Servlet的init()方法一个客户端的请求到达服务器创建一个请求对象创建一个响应对象激活Servlet的Service()方法,并传递请求和响应对象,5.5.1Servlet生命周期介绍,Servlet的生命周期可以归纳为以下几点:Service()方法获得关于请求对象的信息、处理请求、访问其他资源和获得需要的信息。Service()方法使用响应对象的方法,将响应传回服务器,最终到达客户端。对于更多的客户端请求,服务器创建新的请求和响应对象,仍然激活此Servlet的Service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法,一般情况下,Servlet只初始化一次。当服务器不再需要Servlet时或者当服务器关闭的时候,服务器将会调用Servlet的destroy()方法。,5.5.2init()方法,在Servlet初次创建时被调用,之后处理每个用户的请求时,则不再调用这个方法。主要用于一次性的初始化,和applet的init方法相同。Servlet一般在用户首次调用对应Servlet的URL时创建,但也可以指定Servlet在服务器启动后载入。,5.5.2init()方法,init方法的定义如下:init方法执行两种类型的初始化:常规初始化,以及由初始化参数控制的初始化。,5.5.3destory()方法,destroy()方法在容器移除Servlet时执行,同样只执行一次。这个方法会在所有的线程的service()方法执行完成或者超时后执行。调用这个方法后,容器不会再调用这个Servlet的方法,也就是说容器不再把请求发送给这个Servlet。这个方法给Servlet释放占用的资源的机会,通常用来执行一些清理任务。,5.5.3destory()方法,destroy方法的定义如下:服务器移除Servlet实例之前,它会调用Servlet的destroy()方法,从而使得Servlet有机会关闭数据库连接、停止后台运行的线程、将cookie列表和点击计数写入到磁盘,并执行其他清理活动。,5.5.4线程同步,从Servlet的生命周期中,当第一次访问某个Servlet后,该Servlet的实例就会常驻内存,以后再次访问该Servlet就会访问同一个Servlet实例,这样就带来多个用户去访问一个Servlet的同步问题。通常情况下,系统只生成Servlet的单一实例,然后为每个用户请求创建新的线程。可以让Servlet实现SingleThreadModel接口,阻止多线程访问。,5.6用JavaServlet来处理典型的Web应用问题,5.6.1生成静态HTML页面回顾一下安装、编译和运行这个简单servlet的过程:配置环境变量。确保服务器己经正确配置,使得环境CLASSPATH包含了开发Servlet必需的3个目录(servlet-api.jar文件、%TOMCAT_HOME%lib和“.”)。输入“javacHe11oWorld.Java”,或让开发环境编译这个Servlet。例如,单击IDE的Build按钮,或从菜单中选择Compile。这一步将编译Servlet,创建HelloWorld.class。将HelloWorld.class移动到服务器中默认Web应用存储Servlet的目录。不同的服务器,这个位置也会有所不同,但一般的形式是install_dir/WEB-INF/classes。,5.6.2接收get方式提交的请求,get方法会使Web浏览器连接服务器并通过这个单一传输通道传送表单数据。浏览器将会把表单数据追加到action所指定的URL之后(就像命令行参数一样)并用问号将URL与参数值分隔开。get允许从服务器获取信息。对于get请求,URL的结尾会附加一个问号和多个名/值对。其中,名称来自于HTML输入元素的name属性,值来自于终端用户。,5.6.3接受post方式提交的请求,post方法会使Web浏览器分两步传送数据。浏览器首先尝试与在action属性中指定的服务器进行连接。当连接完成,再将表单数据通过这个特定传输通道(separatetransmission)传送给服务器。服务器以标准方式读取表单参数。post允许向服务器上放置新数据。对post方法来说,数据将通过特定传输通道传送。对于post请求,是在请求中单独发送,而不是附加在URL上。对于HTMLpost请求,调用Servlet的doPost方法。,5.6.4文件上传处理,ServletAPI没有为读取上载的文件提供高级的工具。我们必须调用request.getInputStream,自己对请求进行分析。幸运的是,许多第三方软件库可以完成这项任务。最为流行的一种来自于Jakarta通用库,有关信息参见/commons/fileupload/。,5.6.5对会话的管理,保持会话的三种解决方法:Cookie。利用HTTPCookie来存储有关会话的信息,后继的各个链接可以查看当前会话,然后从服务器的某些地方提取有关该会话的完整信息。改写URL。可以把一些标识会话的数据附加到每个URL的后面,服务器能够把该会话标识和它所保存的会话数据关联起来。隐藏表单域。HTML表单中可以包含下面这样的输入域:INPUTTYPE=HIDDENNAME=sessionVALUE=.。这意味着,当表单被提交时,隐藏域的名字和数据也被包含到get或post数据里,我们可以利用这一机制来维持会话信息。,5.6.5对会话的管理,Servlet为我们提供了一种与众不同的方案HttpSessionAPI。HttpSessionAPI是一个基于Cookie或者URL改写机制的高级会话状态跟踪接口:如果浏览器支持Cookie,则使用Cookie;如果浏览器不支持Cookie或者Cookie功能被关闭,则自动使用URL改写方法。Servlet开发者无需关心细节问题,也无需直接处理Cookie或附加到URL后面的信息,API自动为Servlet开发者提供一个可以方便地存储会话信息的地方。,5.6.6请求转发,讲到Servlet请求转发,就要用到javax.servlet.RequestDispatcher接口。RequestDispatcher接口有两种方法,一种是forward,用于请求从一个Servlet传递到服务器上的另外的Servlet、JSP页面或者是HTML文件。另外一种是include,该方法用于在响应中包含其他资源的内容。和forward的区别在于:利用include方法将请求转发给其他的Servlet,被调用的Servlet对该请求作出的响应将并入原先的响应对象中,原先的Servlet还可以继续输出响应信息。而利用forward方法将请求转发给其他的Servlet,将由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。,5.6.7过滤,过滤是Servlet2.3规范新有的功能,目前Tomcat6、Weblogic9都已支持。它能实现很多以前使用不便或很难实现的功能,在产品体系中,我们可以很好地使用Servlet过滤,使得各个部件可以在保持系统统一权限控制的前提下,来实现各个独自的个性权限系统。Servlet过滤是在JavaEE平台内Web容器中执行,任何静态或动态业务请求都将通过这个过滤通道。,5.6.7过滤,Servlet过滤的优点如下:在传统架构中。每次接受到请求,挂钩式方法就被调用,不论它们是否执行(有时甚至是空的)。方法的作用域及并发关系(每个方法可能在不同的线程上被调用)不允许在处理相同的请求时简单、高效地共享不同挂钩式方法调用间的变量和信息。在Servlet过滤中。嵌套的方法调用通过一系列过滤器实现,它仅由应用于当前请求的过滤器组成。基于挂钩式调用的传统执行方式需要在处理短句中调用挂钩式例程,即使一个特定短句的处理逻辑不起任何作用。,5.6.7过滤,在Web应用程序中实现一个Servlet过滤器需要经历三个步骤。编写Servlet过滤器的实现类程序。需要把实现的过滤器添加到Web应用程序中,也就是说,需要在Web部署描述文件web.xml中声明该过滤器。最后要把相关联的过滤器与应用程序一起打包并部署。,5.6.8生成验证码,验证码的一个目的就是防范一些恶意的网站下载软件,这些软件能通过遍历链接而将网站的所有网页下载。还可以防止用户不经过本网站的页面而使用网站的资源。验证码通常是一个在Web服务器上生成的随机字符串,同时以某种方式保存起来,比如保存到当前的Session中,然后在用户提交网页时与用户输入的验证比较是否一致,然而如果直接以明文的方式,还是不能防范一些功能较强的自动填写表格的软件。一般将验证码以图片的形式显示出来,同时可以将在图片中显示的字符串进行一些处理,比如添加背景纹理等技术以增大被软件识别的难度。,5.7JSP原理,5.7.1JSP定义JSP(JavaServerPages)是由SunMicrosystems公司倡导,许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入Java程序段和JSP标记,从而形成JSP文件。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端的浏览器。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP具备了Java技术的简单易用,完全面向对象,平台无关性且安全可靠等特点。,5.7.1JSP定义,JSP技术的优势一次编写,到处运行。在这一点上Java比PHP更出色,更换系统之后,代码不用做任何更改。系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比之下,ASP/PHP的局限性是显而易见的。强大的可伸缩性。从只有一个Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,再到多台应用服务器进行事务处理、消息处理,从一台服务器到无数台服务器,Java显示了强大的可伸缩性。多样化和功能强大的开发工具支持。这一点与ASP很像。Java已经有了许多非常优秀的开发工具,有许多可以免费得到,并且其中许多已经可以顺利地运行于多平台之下。,5.7.1JSP定义,JSP技术的弱势与ASP一样,Java的一些优势正是它致命的问题所在。正是由于其跨平台的功能和极度的伸缩能力,所以极大地增加了产品的复杂性。Java的运行速度是用class常驻内存来完成的,所以它在一定情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面来说,它还需要硬盘空间来存储一系列的java文件、class文件及对应的版本文件。,5.7.2JSP和Servlet的区别,从网络三层结构的角度看,一个网络项目最少分三层:DataLayer(数据层),BusinessLayer(业务逻辑层),PresentationLayer(表示层)。Servlet用来写BusinessLayer是很强大的,但是对于写PresentationLayer就很不方便。JSP则主要是为了方便写PresentationLayer而设计的,当然也可以写BusinessLayer。JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。,5.8编写第一个JSP,5.8.1编写JSP,5.8.2装配到Web应用,JSP文件写好之后不能像HTML文件一样直接可以在浏览器中显示,这是因为JSP文件需要先进行编译,这需要JSP容器(如Tomcat)把JSP文件转换成Java文件(Servlet类文件),然后编译成class文件。把JSP发布到服务器上之前确保已经安装了Tomcat。服务器配置好之后,将first.jsp代码文件复制到tomcatwebappsfirst目录下。装配好之后,首先要启动Tomcat服务器,然后在浏览器中输入http:/localhost:8080/first/first.jsp访问。,5.8.3发布Web应用,当把first工程装配到Tomcat后,可以直接通过浏览器输入http:/localhost:8080/first/first.jsp访问,但是一般情况下,是以war包形式发布。进入JSP文件所在的目录,然后运行如下命令:jarcvffirst.war*.jsp,5.8.4访问JSP,在完成了Web的装配和发布之后就可以在浏览器中访问JSP文件了,在运行之前请确认Tomcat正在运行之中,否则要重新启动。启动Tomcat之后在浏览器中输入http:/localhost:8080/first/first.jsp就可以看到本部分第一小节一开始看到的界面。简单的JSP页面的编写,部署和发布就全部完成了。当然,这只是个简单的JSP示例,具体的项目开发中还会有很多HTML,JSP以及Javabean等很多复杂的代码文件,要开发一个完整的Web应用系统还需要在实践中多下功夫。,5.9用JSP来处理典型的Web应用问题,5.9.1接收get方式提交的请求,5.9.2接受post方式提交的请求,5.9.3文件上传处理,要进行文件上传,可以自己开发一个Servlet或者JavaBean处理上传的任务。总的思路是有Servlet或者JavaBean获得客户端请求的输入流,然后从这个输入流中读取指定的文件,然后把文件保存到指定的位置。原理虽然简单,但是要设计一个功能完备的执行上传文件的类,却是一个比较复杂的任务。值得庆幸的是,可以使用现在已有的工具。如SmartUpload,就是一个比较成熟的上传工具。,5.9.4对会话进行管理,交换信息的方式主要有以下几种:HTTP信息。它将需要交换的信息保存在HTTP头部。随着代理服务器的出现和保密性的问题,这种技术早就过时了。隐藏字段。通过HTML的HIDDEN标记来传递信息。URL重写。把身份认证的信息加到页面链接的尾部。Cookie。浏览器把一些小的片段信息保存在客户端,在以后的使用过程中,服务器端可以使用客户端的Cookie。Cookie虽然是一个有效的解决方式,但是同样存在一些问题:客户端可以选择不接受Cookie,如果这样,有些程序可能不能正常运行。Session。Session就是会话。简单地说,会话可以在单一的用户和服务器之间定义一系列的交互,这些交互可以保持一段时间。,5.10常见JSP动作和指令,5.10.1jsp:include,jsp:include操作允许在请求时间内在现成的JSP页面里面包含静态或者动态资源。被包含的对象只有对JSPwriter对象的访问权,并且它不能设置头或者Cookie。如果页面输出是缓冲的,那么缓冲区的刷新要优先于包含的刷新。此指令在运行上效率比指令的效率低,但可以动态增加内容。,5.10.2jsp:forward,jsp:forward操作允许将请求转发到另一个JSP、Servlet或者静态资源文件。请求被转向到的资源必须位于同JSP发送请求相同的上下文环境中。每当遇到此操作时,就停止执行当前的JSP,转而执行被转发的资源。,5.10.3jsp:useBean,标签用来在JSP页面中创建一个Bean实例,并指定它的名字及作用范围。它保证对象在标签指定的范围内可以使用。其中id是一个大小写相关的名字,用来表示这个实例;scope表示此对象可以使用的范围;typeSpec可以是以下四者之一:,class=classNameclass=classNametype=typeNamebeanName=beanNametype=typeNametype=typeName,5.10.3jsp:useBean,Id是在定义某个JavaBean时指定,通过此ID对JavaBean的实例对象进行引用。scope值表示Bean存在的范围及ID变量名的有效范围。class是Bean的类路径和类名。BeanName使用instantiate方法从一个class中实例化一个Bean,同时还可以指定Bean的类型。type可以是一个类本身(class),也可以是一个类的父类,或者是一个类的接口。,5.10.4jsp:getProperty,jsp:getProperty操作是对jsp:setProperty操作的补充,用来访问一个Bean的属性,访问的属性值将转化成一个String,然后发送到输入流中。如果属性是一个对象,将调用toString()方法。name是个必选项。其值为Bean的名字,为在这之前用jsp:useBean引入的名称。property是个必选属性。其值为所指定的Bean的属性名。,5.10.5jsp:setProperty,此操作与useBean协作,用来设置Bean的简单索引属性。标签使用Bean给定的setXXXX()方法,在Bean中设置一个或多个属性值。利用设置属性值有多种方法。,5.11专题:编码问题,5.11.1概述世界上的各地区都有本地的语言。地区差异直接导致了语言环境的差异。在开发一个国际化程序的过程中,处理语言问题就显得很重要了。Java提供了世界性的解决方法。我们描述的方法是用于处理中文的,但是,推而广之,对于处理世界上其他国家和地区的语言同样适用。,5.11.1概述,5.11.2GB2312、GBK和UTF-8,GB2321早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的BIG5。GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其他符号。汉字区的内码范围高字节从B0F7,低字节从A1FE,占用的码位是7294=6768。其中有5个空位是D7FAD7FE。GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。,5.11.2GB2312、GBK和UTF-8,GBKGBK:汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号,21003个汉字及提供了1894个造字码位。GB码,全称是GB2312-80信息交换用汉字编码字符集基本集,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。,5.11.2GB2312、GBK和UTF-8,UTF-8UTF-8是Unicode的一种变长字符编码,由KenThompson于1992年创建。现在已经标准化为RFC3629。UTF-8用16个字节编码Unicode字符。如果Unicode字符由两个字节表示,则编码成UTF-8很可能需要三个字节,而如果Unicode字符由四个字节表示,则编码成UTF-8可能需要六个字节。UTF-8编码可以通过屏蔽位和移位操作快速读写。字符串比较时strcmp()和wcscmp()的返回结果相同,因此使排序变得更加容易。,5.11.3JSP编码问题,JSP:从源文件到Class的过程JSP/Servlet引擎提供的JSP转换工具(jspc)搜索JSP文件中用”%中指定的charset。jspc用相当于“javacencoding”的命令解释JSP文件中出现的所有字符,包括中文字符和ASCII字符,然后把这些字符转换成Unicode字符,再转化成UTF格式,存为Java文件。引擎用相当于“javacencodingUNICODE”的命令,把Java文件编译成Class文件。,5.11.3JSP编码问题,Servlet:从源文件到class的过程源文件在编译时,用来解释所有字符,包括中文字符和ASCII字符。然后把字符常量转变成Unic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工设备自动化升级工艺考核试卷及答案
- 热注运行工协同作业考核试卷及答案
- 铁路机车电工专项考核试卷及答案
- 货检值班员设备维护与保养考核试卷及答案
- 公司行政公文财务商务等事务知识测试卷
- 货物运输协议
- 屋顶防水公司员工保密合同
- 股权转让协议书
- 银行资管考试题库及答案
- 【课件】数轴+课件2025-2026学年人教版(2024)七年级数学上册+
- 2025年国家网络安全宣传周知识竞赛考试练习题库(完整版)含答案
- 铸牢中华民族共同体意识
- 绿化项目养护监理方案投标文件(技术方案)
- 科普短视频与新闻传播融合模式的研究
- 2025年秋季第一学期【数学】教研组工作计划:数智赋能提质量学研细导促成长
- 2025滨州市劳动合同范本(示范文本)
- 2025年教师资格证中学综合素质+教育知识与能力真题及答案
- 安徽省港航集团有限公司所属企业招聘笔试真题2024
- 智能楼宇节能改造实施方案
- 2025年电信岗位认证考试题库
- 口腔科国庆节活动方案
评论
0/150
提交评论