Java EE程序设计教程476_第1页
Java EE程序设计教程476_第2页
Java EE程序设计教程476_第3页
Java EE程序设计教程476_第4页
Java EE程序设计教程476_第5页
已阅读5页,还剩471页未读 继续免费阅读

下载本文档

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

文档简介

JavaEE概述Web应用开发技术(JavaEE)学习目标学习目标了解JavaEE的产生与发展过程;熟悉JavaEE应用模型;熟悉JavaEE常用技术;了解并认识JavaEE7的新特性;熟悉JavaEE7应用服务器;掌握JavaEE开发环境的配置方法。本章提纲JavaEE的产生与发展JavaEE应用模型JavaEE常用技术JavaEE7新特性JavaEE7应用服务器JavaEE开发环境的配置JavaEE的产生与发展JavaEE是JavaPlatForm2EnterpriseEdition的缩写。从1999年12月17日发布J2EE1.2版本,到今天已经走过了10多个年头,共发布了5个版本,最新版本是JavaEE6。各版本的发布时间如下:J2EE1.2,发布时间为1999年12月17日。J2EE1.3,发布时间为2001年8月22日。J2EE1.4,发布时间为2003年11月24日。JavaEE5,发布时间为2006年5月8日。JavaEE6,发布时间为2009年12月10日。JavaEE7,发布时间为2013年6月18日。JavaEE应用模型JavaEE典型的四层结构,如图1-1所示。图1-1JavaEE应用模型JavaEE应用程序组件

JavaEE应用程序是由组件构成的。JavaEE组件是具有独立功能的软件单元,它们通过相关的类和文件组装成JavaEE应用程序,并与其他组件交互。

JAVAEE说明书中定义了以下的JAVAEE组件:应用客户端程序和applets是客户层组件JavaServlet和JavaServerPages(JSP)是web层组件EnterpriseJavaBeans(EJB)是业务层组件JavaEE应用模型客户层组件

JAVAEE应用程序可以是基于web方式的,也可以是基于传统方式的。web层组件

JAVAEEweb层组件可以是JSP页面或Servlets,按照JAVAEE规范,静态的HTML页面和Applets不算是web层组件。JavaEE应用模型业务层组件

业务层代码的逻辑用来满足银行、零售、金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理。图1-3表明了一个enterprisebean是如何从客户端程序接收数据,进行处理,并发送到EIS层储存的,这个过程也可以逆向进行。JavaEE应用模型企业信息系统层

企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划(ERP),大型机事务处理,数据库系统和其它的遗留信息系统。例如,JAVAEE应用组件可能为了数据库连接需要访问企业信息系统。JavaEE常用技术JDBC

JDBC(JavaDatabaseConnectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问的途径,它由一组用Java语言编写的类和接口组成。JNDI

JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI提供的接口,能够通过名字定位用户、机器、网络、对象服务等。JavaEE常用技术EJB

EJB(EnterpriseJavaBean)是JavaEE的服务器端组件模型,用于部署分布式应用程序。即把已编写好的程序打包放在服务器上执行,客户端以C/S形式对服务器上的程序进行调用。凭借java跨平台的优势,用EJB技术部署的分布式系统可不限于特定的平台。JavaEE常用技术RMI

RMI(RemoteMethodInvocation,远程方法调用)定义了调用远程对象上的方法的标准接口,通过使用连续序列方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。JavaEE常用技术JSP

JSP(JavaServerPages,Java服务器页面)是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行,相比传统的ASP脚本的解释方式,JSP运行速度更快。JavaEE常用技术Servlet

Servlet(ServerApplet)是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中,当被请求时开始执行,常用来扩展基于HTTP协议的Web服务器。JavaEE常用技术JMS

JMS

(JavaMessagingService)

是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的消息模型,又支持发布/订阅(publish/subscribe)的消息模型,还提供对经认可的消息传递、事务型消息的传递、一致性消息和具有持久性的订阅者等消息类型的支持。JavaEE常用技术JTA

JTA(JavaTransactionArchitecture,Java事务架构)定义了面向分布式事务服务的标准API,应用系统由此可存取各种事务监控,如事务范围的界定、事务的提交和回滚。JTS

JTS(JavaTransactionService)

是CORBAOTS(CORBAObjectTransactionService,CORBA对象事务服务)事务监控的基本的实现,JTS规定了事务管理器的实现方式。该事务管理器是在高层支持JTA规范,且在较底层实现OMGOTSspecification的Java映像。JavaEE常用技术JavaIDL/CORBA

在JavaIDL的支持下,开发人员可将Java和CORBA集成在一起。既可创建Java对象并使之可在CORBAORB中展开,或可创建Java类并作为和其它ORB一起展开的CORBA对象的客户。JavaMailandJAF(JavaBeansActivationFramework)

JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。JavaMail利用JAF来处理MIME-编码的邮件附件。JavaEE常用技术JSF

JSF(JavaServerPages,Java构建框架)是一种用于构建Web应用程序的Java框架,是JavaEE表示层的技术,其主旨是为了使Java开发人员能够快速地开发基于Java的Web应用程序。WebService

WebService是一种通过WWW的HTTP进行交互和交流的方式,使得运行在不同的平台和框架的软件应用程序之间可以进行互操作。WebService可以以松耦合的方式完成复杂的操作,具有强大的互操作能力和可扩展能力。JavaEE常用技术WebSocket

WebSocketprotocol是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。在JavaEE7中实现了WebSocket协议。AJAX

AJAX(Asynchronous

Javascript

And

XML,异步JavaScript和XML)是一种创建快速动态网页的开发技术,通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。JavaEE常用技术JAX-RS

JAX-RS(JavaAPIforRESTfulWebServices)是一个Java编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。它是JAVAEE6引入的一个新技术。JAX-RS使用了JavaSE5引入的Java标注来简化Web服务的客户端和服务端的开发和部署。它提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。JavaEE常用技术JSR

JSR(JavaSpecificationRequests,Java规范提案)指向JCP(JavaCommunityProcess)提出新增一个标准化技术规范的正式请求。任何人都可提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准,JSR107成为了JavaEE7的一部分。XML

XML是一种可用来定义其它标记语言的语言,它被用来在不同的商务过程中共享数据。XML的发展和Java是相互独立的,但它和Java具有相同的目标,即平台独立性。通过将Java和XML的组合,可得到一个完美的具有平台独立性的解决方案。JavaEE7新特性

JavaEE7扩展了JavaEE6,该版本的新特性主要集中在提高开发人员的生产力、加强对HTML5动态可伸缩应用程序的支持和进一步满足苛刻的企业需求这三个方面。JavaEE7使得开发人员可以写更少的样板代码,通过丰富的组件来提供一个完整、全面、集成的堆栈来支持和构建最新的Web应用程序和框架,同时提供更具扩展性、丰富性和简易的功能。企业将会从便捷式批处理、改进的扩展性等新功能中获益。JavaEE7新特性通过对该版本中新增组件WebSocket1.0、JSONProcessing1.0、JAX-RS2.0、JSF2.2和JMS2.0的介绍剖析以上三个特性:减少冗余代码更多带注释的POJO更紧密集成的平台通过精简现有技术来简化JavaEE对HTML5动态可伸缩应用程序的支持JavaEE7新特性低延迟数据交换:JavaAPIforWebSocket1.0简化应用数据分析和处理:JavaAPIforJSONProcessing1.0可扩展的RESTful服务:JAX-RS2.0增强开发的易用性:JSF2.2满足苛刻的企业需求在Java平台中,提高批处理应用程序的效率使开发过程变得更加便捷和高效JavaEE7应用服务器市场上主流的JavaEE应用服务器软件有如下几种:GlassFishPayaraWebSphereApplicationServerJettyResinWildFlyJavaEE7应用服务器JFoxWebLogicTomcatApusicJavaEE开发环境的配置JavaEE开发环境的配置内容如下,具体配置方法参照教材:JDK7安装与配置EclipseIDE安装Tomcat安装与配置MySQL安装与配置Maven的安装和使用Git的安装和使用小结思考题1.JavaEE架构中的应用模型有哪些?2.JavaEE架构中的常用技术有哪些?3.JavaEE7架构中的新特性有哪些?4.支持JavaEE架构的服务器有哪些?Servlet应用开发Web应用开发技术(JavaEE)学习目标学习目标要求学生掌握Servlet的语法;熟练掌握Servlet运行环境的配置方法;基本具备用Servlet设计开发Web应用程序的能力,解决Servlet在项目运行中的常见问题;掌握Servlet访问数据库的技术;掌握使用和配置过滤器Filter的方法;掌握使用和配置监听器Listener的方法。本章提纲Servlet概述第一个Servlet实例Servlet工作原理使用Eclipse开发Servlet在Servlet中读取参数使用和配置过滤器Filter使用和配置监听器ListenerServlet概述

Servlet=Service+Applet,表示小服务程序,是使用Java语言编写的服务器端程序。它主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准开发的类。Servlet是在JSP之前就存在的运行在服务器端的一种Java技术,它被广泛地应用于开发动态的Web应用程序。第一个Servlet实例//完成该Servlet功能需要导入的Java类import

java.io.IOException;

import

java.io.PrintWriter;

import

javax.servlet.ServletException;

import

javax.servlet.http.HttpServlet;

import

javax.servlet.http.HttpServletRequest;

import

javax.servlet.http.HttpServletResponse;

public

class

HelloWorldServlet

extends

HttpServlet

{

//实现doGet方法

protected

void

doGet(HttpServletRequest

request,

HttpServletResponse

response)

throws

ServletException,

IOException

{

//让输出页面支持中文显示

response.setContentType("text/html;charset=UTF-8");

//获得输出对象out

PrintWriter

out

=

response.getWriter();

//向请求端输出Hello

World

out.print("Hello

World

!");

}

}

Servlet工作原理Servlet的调用过程Servlet工作原理Servlet的生命周期Servlet生命周期分为三个阶段:初始化Servlet。Servlet第一次被请求加载时,服务器初始化这个Servlet,即创建一个Servlet对象,该对象调用init()方法进行初始化操作。创建的Servlet对象调用service()方法来响应客户请求.当服务器关闭时,Servlet对象调用destroy()方法,销毁Servlet对象。Servlet工作原理生命周期的3个方法为:Servlet工作原理init()方法服务器构造Servlet实例后调用执行Servlet初始化–

创建或加载Servlet在处理请求时使用的对象可以覆盖init()方法,添加其他初始化内容Servlet工作原理

service()方法service()方法一般不去覆盖它;service()方法用于分析用户的请求,根据用户的请求类型;调用不同的处理方法;如:doPost(),doGet()等通常重写的是doPost()或doGet方法Servlet工作原理

destroy()方法卸载Servlet时,调用destroy()方法服务器在完成所有服务调用之后,或者在经过服务器特定的秒数之后调用destroy()方法容器关闭的时候调用destory方法使用Eclipse开发Servlet在Eclipse中配置Tomcat在Eclipse菜单栏中依次单击“Window->Preferences”,打开“Preferences”对话框,单击“Server”下的“RuntimeEnvironment”,单击右方的“Add”按钮,如下图所示。使用Eclipse开发Servlet打开“NewServerRuntimeEnvironment”对话框,选择已成功安装的“ApacheTomcatv7.0”版本,如下图所示。使用Eclipse开发Servlet单击“Next”,在打开的对话框中,单击“Browse”按钮,选择Tomcat的安装目录,如下图所示。单击“Finish”按钮,单击“OK”即完成配置。使用Eclipse开发Servlet创建工程在Eclipse菜单栏中依次单击“File->New->DynamicWebProject”,打开创建Web动态工程对话框。接下来对工程参数进行配置,包括工程名称设置(Projectname)、选择工程放置位置(Projectlocation)、工程运行环境(Targetruntime和Configuration)等。如下图所示,将工程名设置为testServlet,工程的存放路径使用默认的位置,默认位置是在Eclipse的workspace中创建一个与工程名相同的文件夹用来存放工程代码,工程的运行环境设置为ApacheTomcatv7.0,Dynamicwebmoduleversion设置为3.0版本。使用Eclipse开发Servlet完成工程参数配置后,单击“Next”按钮,设置工程源代码放置的文件夹,常采用Eclipse提供的默认值,继续单击“Next”按钮,设置工程的Web文件结构,通常将产生web.xml的选项勾选上,让Eclipse在创建工程时自动生成web.xml配置文件,其他采用默认方式,该步操作过程如下图所示。使用Eclipse开发Servlet最后单击“Finish”按钮,Eclipse将创建工程,我们可以在ProjectExplorer视图中看到创建好的工程的文件及其组织结构。如下图所示,JavaResources目录下存放的是Java源代码(src文件夹中)以及在编译Java源码时需要用到的类库的引用说明(Libraries目录下),WebContent文件夹中存放的是Web工程的所有配置文件、页面文件及资源文件。使用Eclipse开发Servlet创建Servlet类在Web应用中,一般开发者定义的Servlet类都扩展HttpServlet。HttpServlet中最常用的是doGet和doPost方法,它们都有一个HttpServletRequest类型和HttpServletRespons类型的参数,前者封装客户端提交的请求,后者封装处理结果,并返回给客户端进行响应。doGet方法用于处理GET类型的请求,这类请求一般在使用Web浏览器通过HTML、JSP直接访问Servlet的URL时出现。doPost方法用于处理POST类型的请求,这类请求通常发生在提交表单的情况。使用Eclipse开发Servlet从HttpServlet派生的Servlet类需要在doGet或doPost方法中加入对客户端请求的响应处理逻辑,并将处理结果封装到response中返回给客户端进行显示。通常是在src目录中创建实现Servlet类的Java文件。使用Eclipse开发Servlet一个简单的Servlet类的示例packagetestServlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassFirstSimpleServletextendsHttpServlet{ publicFirstSimpleServlet(){ super(); } //处理HTTPGET类型的请求 protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ //设置输出页面支持中文显示 resp.setContentType("text/html;charset=UTF-8");

使用Eclipse开发Servlet一个简单的Servlet类的示例(续)

//获得输出对象 PrintWriterout=resp.getWriter(); //向请求端输出信息 out.println("Thisisasimpleservlet"+"<br>"); //显示请求是以GET方式还是POST方式提交的 out.println(req.getMethod()); } //处理HTTPPOST类型的请求 protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ //当收到HTTPPOST类型的请求时,直接调用doGet方法进行相同的处理 super.doPost(req,resp); }}使用Eclipse开发Servlet配置Servlet类定义了Servlet类之后,还需要对其进行配置,使得Servlet容器发现并找到Servlet类,从而使其发挥作用。通常使用xml文件配置Servlet类,其配置方法是在WebContent中WEB-INF文件夹下的web.xml文件的<web-app></web-app>元素之间添加相应的内容。以配置上节中的FirstSimpleServlet类为例,其对应的配置文件代码如下。<web-app> <display-name>testServlet</display-name> <!--说明Servlet类--> <servlet> <!--Servlet类的别名--> <servlet-name>FirstSimpleServlet</servlet-name> <!--Servlet类的全名,包括所属的包名--> <servlet-class>testServlet.FirstSimpleServlet</servlet-class> </servlet> <!--说明Servlet类与访问地址的映射--> <servlet-mapping><!--Servlet类的别名,该别名与<servlet>元素中定义的Servlet类的别名一致--> <servlet-name>FirstSimpleServlet</servlet-name> <!--访问Servlet类的地址--> <url-pattern>/myurl</url-pattern> </servlet-mapping></web-app>使用Eclipse开发Servlet发布Servlet在Eclipse开发界面的工程视图中,右键单击Servlet类所在的工程名,选择“RunAs->RunonServer”,如下图所示。使用Eclipse开发Servlet或者直接在Servers视图上,单击如下图所示链接。使用Eclipse开发Servlet在弹出的RunonServer对话框中选择已配置的ApacheTomcatv7.0服务器,然后单击“Next”按钮,将Servlet类所在的工程添加到右侧的列表框中,最后单击“Finish”按钮。使用Eclipse开发Servlet经过上边两个步骤Servlet工程和Servlet类就会被发布到选定的服务器上,等待用户的访问。发布完成之后,能够在ProjectExplorer、Servers和console视图上看到发布成功的信息,如下图所示。使用Eclipse开发Servlet调用Servlet类

在浏览器地址栏中输入地址,即可调用Servlet类。在Servlet中读取参数设置参数设置全局参数设置局部参数在Servlet中读取参数设置全局参数即application范围内的参数,该参数所有Servlet都可以访问,存放在ServletContext中,在web.xml中配置如下:<context-param>

<param-name>参数名<param-name>

<param-value>参数值<param-value></context-param>注意:上述代码的位置必须在web.xml文件的最上面。在Servlet中读取参数设置局部参数即Servlet范围内的参数,该参数仅在该Servlet中有效,且只能在Servlet的init()方法中取得,在web.xml中配置如下:

<servlet>

<servlet-name>Servlet名称</servlet-name>

<servlet-value>Servlet类路径</servlet-class>

<init-param>

<param-name>参数名<param-name>

<param-value>参数值<param-value>

</init-param></servlet>

在Servlet中读取参数获取参数获取全局参数获取局部参数获取全局参数:ServletContextcontext=this.getServletContext();context.getInitParameter("参数名");获取局部参数:this.getInitParameter("参数名");注意:此处的this指Servlet本身。下面是一个在servlet中获取两种参数的例子。importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;publicclassMainServletextendsHttpServlet{publicMainServlet(){super();}publicvoidinit()throwsServletException{System.out.println(this.getInitParameter("参数名"));//获取局部参数System.out.println(getServletContext().getInitParameter("参数名"));//获取全局参数}}使用和配置过滤器Filter

Filter简介

Servlet过滤器(Filter)是在JavaServlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改,主要对Servlet、JSP和HTML文件进行过滤。Filter不是一个servlet,它本身并不生成请求和响应对象,它只提供过滤作用。Filter主要用于对HttpServletRequest进行预处理,也可以对HttpServletResponse进行后处理。使用和配置过滤器Filter过滤器的作用在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。

根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。

在HttpServletResponse到达客户端之前,拦截HttpServletResponse。

根据需要检查HttpServletResponse,可以修改HttpServletResponse头和数据。使用和配置过滤器FilterServlet过滤器的过滤过程使用和配置过滤器Filter过滤器的使用和配置实现Servlet过滤器的功能,必须实现javax.servlet.Filter接口,该接口包含3个过滤器类必须实现的方法:init(FilterConfigcfg)doFilter(ServletRequestreq,ServletResponseres,FilterChainchain)destory()使用和配置过滤器Filterinit(FilterConfigcfg)方法这是Servlet过滤器的初始化方法,在Filter生命周期中仅执行一次,即web容器在调用init方法时执行。doFilter(ServletRequestreq,ServletResponseres,FilterChainchain)方法该方法完成实际的过滤操作,当请求访问过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。其中filterChain参数用于访问后续过滤器。

使用和配置过滤器Filterdestory()方法Servlet容器在销毁过滤器实例前调用该方法,该方法可释放Servlet过滤器占用的资源,其在Filter的生命周期中仅执行一次。使用和配置过滤器FilterServlet过滤器的创建步骤:实现javax.servlet.Filter接口的Servlet类。实现init方法,读取过滤器的初始化函数。实现doFilter方法,完成对请求或过滤的响应。调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应。实现一个过滤器后,需要在web.xml中对过滤器进行配置,即在web.xml文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源。使用和配置过滤器Filter过滤器使用与配置的一个完整的例子编码过滤器:public

class

EncodingFilter

implements

Filter

{

private

String

encoding;

private

Map<String,

String>

params

=

new

HashMap<String,

String>();

//

实现Filter

接口的destroy方法,项目结束时就已经进行销毁

public

void

destroy()

{

System.out.println("end

do

the

encoding

filter!");

params=null;

encoding=null;

}

//实现Filter

接口的doFilter方法

public

void

doFilter(ServletRequest

req,

ServletResponse

resp,

FilterChain

chain)

throws

IOException,

ServletException

{

System.out.println("before

encoding

"

+

encoding

+

"

filter!");

req.setCharacterEncoding(encoding);

chain.doFilter(req,

resp);

System.out.println("after

encoding

"

+

encoding

+

"

filter!");

System.err.println("");

}

//

实现Filter

接口的init方法,项目启动时就已经进行读取

public

void

init(FilterConfig

config)

throws

ServletException

{

System.out.println("begin

do

the

encoding

filter!");

encoding

=

config.getInitParameter("encoding");

for

(Enumeration

e

=

config.getInitParameterNames();

e

.hasMoreElements();)

{

String

name

=

(String)

e.nextElement();

String

value

=

config.getInitParameter(name);

params.put(name,

value);

}

}}

使用和配置过滤器Filter

编码过滤器配置:<filter>

<filter-name>setCharacterEncoding</filter-name>

<filter-class>pany.strutstudy.web.servletstudy.filter.EncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>setCharacterEncoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

使用和配置监听器Listener监听器简介

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变情况,当被监听对象发生上述事件后,监听器某个方法将立即被执行。使用和配置监听器Listener监听机制

Java的事件监听机制涉及到三个组件:事件源、事件监听器、事件对象;当事件源上发生操作时,它将会调用事件监听器的一个方法,并在调用这个方法时,会传递事件对象过来;事件监听器由开发人员编写,开发人员在事件监听器中,通过事件对象可以拿到事件源,从而对事件源上的操作进行处理。使用和配置监听器Listener三个域对象在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为

ServletContext,

HttpSession

ServletRequest

这三个域对象。

使用和配置监听器Listener监听器的三种类型监听三个域对象创建和销毁的事件监听器;监听域对象中属性的增加和删除的事件监听器;监听绑定到HttpSession域中的某个对象的状态的时间监听器。

使用和配置监听器Listener对应以上3个事件源的监听器接口分别是ServletContextAttributeListener,HttpSessionAttributeListener和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加、删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。使用和配置监听器Listener

ServletContext事件的监听类必须实现的接口和当事件发生时调用的方法。事件类型接口方法Servletcontext被创建javax.servlet.ServletContextListenercontextInitialized()Servletcontext被注销javax.servlet.ServletContextListenercontextDestroyed()增加属性javax.servlet.ServletContextAttributeListenerattributeAdded()删除属性javax.servlet.ServletContextAttributeListenerattributeRemoved()属性被替换javax.servlet.ServletContextAttributeListenerattributeReplaced()使用和配置监听器Listener

HttpSession事件的监听类必须实现的接口和当事件发生时调用的方法。事件类型接口方法session激活javax.servlet.http.HttpSessionListenersessionCreated()session删除javax.servlet.http.HttpSessionListenersessionDestroyed()增加属性javax.servlet.http.HttpSessionAttributeListenerattributeAdded()删除属性javax.servlet.http.HttpSessionAttributeListenerattributeRemoved()属性被替换javax.servlet.http.HttpSessionAttributeListenerattributeReplaced()使用和配置监听器Listener

ServletRequest事件的监听类必须实现的接口和当事件发生时调用的方法。事件类型接口方法Request初始化javax.servlet.ServletRequestListenerrequestInitialized()Request销毁javax.servlet.ServletRequestListenerrequestDestroyed()增加属性javax.servlet.ServletRequestAttributeListenerattributeAdded()删除属性javax.servlet.ServletRequestAttributeListenerattributeRemoved()属性被替换javax.servlet.ServletRequestAttributeListenerattributeReplaced()使用和配置监听器Listener使用和配置监听器定义监听器类的步骤如下:创建新的类并实现事件对应的接口;定义不接受参数、访问属性为public的构造函数;实现接口的方法;编译并拷贝到对应Web应用的WEB-INF/classes目录下,或者打包成jar文件拷贝到WEB-INF/lib目录下。使用和配置监听器Listener

使用和配置监听器步骤如下:打开Web应用的部署描述文件web.xml增加事件声明标记<listener>。事件声明定义的事件监听类在事件发生时被调用。<listener>标记必须在<filter>标记和<servlet>标记之间。可以为每种事件定义多个事件监听类,Apusic应用服务器按照它们在部署描述文件声明的顺序调用。例如:<listener><listener-class>com.puckasoft.video.servlet.TestSessionListener</listener-class></listener>小结思考题1、有两个Servlet:servlet1和servlet2,servlet1把HttpServletRequest和HttpServletResponse成功发送到servlet2,在servlet1中有如下代码:IntegerI=newInteger(10);request.setAttribute(“x”,I);以下是在servlet2中对属性x操作的代码,正确的是:A.Integery=request.getAttribute(“x”);B.Objecty=request.getAttribute(“x”);C.inty=((Integer)request.getAttribute(“x”)).intValue();D.Integery=(Integer)request.getAttribute(x);E.request.removeAttribute(“x”);小结思考题2、在web.xml中,有如下代码:对于以下描述,正确的是:A.定义了默认的会话超时时长。时长为30秒。B.可以使用HttpSession接口的getMaxInactiveInterval()方法把该值取出来。C.定义了默认的会话超时时长。时长为30小时。D.可以使用Session类的getMaxInactiveInterval()方法把该值取出来。小结思考题3、对于自己编写的Servlet1,以下对Servlet1的定义正确的是:A.classServlet1implementsjavax.servlet.ServletB.classServlet1extendsjavax.servlet.GenericServletC.classServlet1extendsjavax.servlet.http.HttpServletD.classServlet1extendsjavax.servlet.ServletRequest4、对于简单属性来说,Bean工具是这样找出属性的:A.如果有XX方法,则暗指有一个名为“XX”的属性。B.如果有一个方法名为isX,则通常暗指“X”是一个布尔属性。C.如果有一个方法名为isNotX,则通常暗指“X”是一个布尔属性。D.如果有setX和getX方法,则暗指有一个名为“X”的属性。JSP应用开发Web应用开发技术(JavaEE)学习目标学习目标能配置典型的JSP开发环境;能掌握JSP的基本语法;能掌握JSP的内置对象;能应用JavaBean进行数据的封装和处理;能应用JSP进行动态网站开发;会使用JDBC访问数据库技术连接数据库;能实现动态网站中常用的功能如:购物车、文件上传下载等。本章提纲JSP概述一个简单的JSP例子JSP运行原理JSP基本构成JSP内置对象JSP页面调用ServletJSP页面调用JavaBeanJSP概述JSP是JavaServerPage的缩写,是SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术是在传统的网页HTML文件(*.htm,*.html)中嵌入Java程序段和JSP标签,从而形成JSP文件。用JSP开发的Web应用是跨平台的,能在Windows、Linux、Mac和Solaris等操作系统上运行。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。嵌入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP概述JSP的主要特点JSP支持在HTML中嵌入Java代码,使得JSP继承了Java的特性。JSP能够与JavaBean很好地集成在一起,通过JavaBean进行逻辑封装,实现逻辑功能代码的重用。JSP具有预编译功能。JSP继承了JavaServlet的功能。JSP具有业务代码分离的特性。一个简单的JSP例子在传统的HTML网页文件中加入Java程序段和JSP标签就构成了一个JSP页面文件,即一个JSP页面除了普通的HTML标记符外,再使用标记符号“<%”、“%>”加入Java程序段。JSP页面文件的后缀名为jsp,文件的名字必须符合标识符规定,由于JSP技术基于Java语言,名字区分大小写。

下面的例子SimpleJSP.jsp是一个简单的JSP页面。<%@pagelanguage="java"contentType="text/html;charset=GB2312"%><html><head><title>Inserttitlehere</title></head><body><FontSize=1><P>一个简单的JSP页面<% inti,sum=0; for(i=1;i<=100;i++){ sum=sum+i; }%> <P> 1到100的连续和是:<br><%=sum%></body></html>JSP运行原理JSP同Servlet一样,是服务器端技术,运行在服务器端。WEB容器接收到JSP页面的访问请求时,将该访问请求交给JSP引擎去处理,JSP引擎负责解释和执行JSP页面;每个JSP页面在第一次被访问时,JSP引擎首先将它翻译成Servlet程序,JSP中的页面显示内容即HTML部分会用out对象进行打印输出,然后再将此Servlet程序编译成.class文件;最后JSP引擎加载运行对应的.class文件生成相应的结果页面,并将输出结果发送到浏览器端进行显示。JSP基本构成JSP页面的基本构成:JSP声明Java程序块JSP表达式JSP指令JSP动作JSP注释JSP基本构成JSP声明在JSP页面中可以声明变量和方法。这些声明的变量和方法的作用域是声明该变量和方法的JSP页面。声明通常是供JSP页面中其他Java程序段使用,本身不会产生任何输出,对页面不会造成直接影响。JSP声明在“<%!”和“%>”标记符号之间。声明变量和方法的语法格式与Java语言对变量和方法的声明格式一致。JSP基本构成声明变量的例子声明方法的例子JSP基本构成Java程序块JSP中可以通过嵌入Java代码来实现所需的功能,这大大增强了JSP的灵活性。JSP文件中可在“<%”和“%>”标记符号之间嵌入任何合法的Java代码。<%…%>可以出现在JSP页面的任何地方,可以出现任意多次。每个<%…%>中可以包含多条Java语句,每条语句必须使用;号结尾。每个<%…%>中的代码可以不完整,但是一个JSP页面中所有<%…%>中的语句组合在一起必须是完整的。在JSP页面被转换成Servlet时,<%…%>中的代码被默认放到生成Servlet的service方法中。JSP基本构成JSP表达式JSP中可以在“<%=”和“%>”之间插入表达式,将Java变量或Java表达式的值输出到HTML页面中相应的位置。JSP对于表达式的处理:计算变量或表达式的值;将值转换成字符串;用out.println发送标签,按照先后顺序依次将结果输出至页面上JSP表达式所在的位置。

JSP基本构成注意事项:“<%=”和“%>”之间不可插入语句,即表达式结尾不能有“;”号;“<%”

和“=”之间不要有空格;变量或表达式中包含的变量必须是已声明的。JSP基本构成JSP指令JSP指令格式:<%@指令名{属性名=“属性值”}%>在JSP规范中定义了3种指令:page、include和taglibJSP基本构成page指令Page指令用来对整个JSP页面的各种属性进行设置,作用域为整个页面,与其书写位置无关,但习惯把page指令放置在JSP页面的起始位置。page指令可以给import属性指定多个值,值与值之间用逗号分隔,而给其他属性只能指定一个值。可使用多个page指令来指定属性及其值。需要注意的是,可以使用多个page指令给属性import指定多个值,但其他属性只能使用一次pager指令给该属性指定一个值。JSP基本构成Page指令各属性介绍属性名说明language设定JSP页面使用的脚本语言。默认为java,目前只可使用java语言extends此JSP页面生成的Servlet的父类import指定导入的java软件包或类名列表。如果多个类时,中间用逗号隔开session设定JSP页面是否使用Session对象。值为“true|false”,默认为truebuffer设定输出流是否有缓冲区。默认为8KB,值为“none|sizekb”autoFlush设定输出流的缓冲区是否要自动清除。值为“true|false”,默认值为trueisThreadSafe指定对JSP页面的访问是否为线程安全。值为“true|false”,默认为trueinfo定义JSP页面的描述信息errorPage指定当JSP页面发生异常时需要转向的错误处理页面isErrorPage指定当前页面是否可以作为错误处理页面。值为“true|false”,默认为falsecontentType指定当前JSP页面的MIME类型和字符编码pageEncoding指定JSP页面的使用的字符编码。默认为ISO-8859-1isELlgnored指定JSP页面是否允许执行EL表达式。值为“true|false”,默认值为falseJSP基本构成include指令JSP通过include指令来包含其他文件,被包含的文件可以是JSP文件、HTML文件或文本文件,包含文件将在JSP页面转换成Servlet之前被插入到include指令出现的位置。Include指令的语法格式如下:

<%@includefile="relativeurl"%>Include指令中的文件名实际上是一个相对的url。如果未给文件关联一个路径,JSP编译器默认在当前路径下寻找。JSP基本构成taglib指令JSP允许用户自定义JSP标签,并在JSP页面中使用taglib指令。声明用户使用自定义的标签,将标签库描述符文件导入到jsp页面。

taglib指令语法格式如下:<%@tagliburi="tigLibURL"(或tagDir="tagDir")prefix="tagPrefix"%>JSP基本构成JSP动作JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。JSP动作元素,动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。JSP基本构成JSP2.0规范中定义了20个标准的动作元素,可以分为5类:与存取JavaBean有关的,包括3个动作元素,即<jsp:useBean><jsp:setProperty><jsp:getProperty>;JSP1.2开始有的基本元素,包括6个动作元素,即<jsp:include><jsp:forward><jsp:param><jsp:plugin><jsp:params><jsp:fallback>;JSP基本构成JSP2.0规范中定义了20个标准的动作元素,可以分为5类(续):JSP2.0新增加的元素,主要与JSPDocument有关,包括六个元素,即<jsp:root><jsp:declaration><jsp:scriptlet><jsp:expression><jsp:text><jsp:output>;JSP2.0新增的动作元素,主要是用来动态生成XML元素标签的值,包括3个动作,即jsp:attribute><jsp:body><jsp:element>;JSP2.0新增的动作元素,主要是用在TagFile中,有2个元素,即<jsp:invoke><jsp:dobody>。JSP基本构成常用的有6个动作元素:include动作forward动作seBean动作getProperty动作setProperty动作plugin动作JSP基本构成include动作<jsp:include>标签能够把指定文件插入到正在生成的页面中。语法:<jsp:include

page="path"

flush="true"

/>或<jsp:include

page="path"

flush="true"><jsp:param

name="paramName"

value="paramValue"

/></jsp:include>JSP基本构成include动作注:page="path"

为相对路径,或其表达式。flush="true"

必须设置flush为true,因为它默认值是false。<jsp:param>子句能传递一个或多个参数给动态文件,也可在一个页面中使用多个<jsp:param>来传递多个参数给动态文件。JSP基本构成forward动作<jsp:forward>标签表示重定向一个静态html/jsp的文件,或者是一个程序段。语法:<jsp:forward

page="path"}

/>或<jsp:forward

page="path"}

><jsp:param

name="paramName"

value="paramValue"

/>……</jsp:forward>JSP基本构成forward动作注:page="path"

为一表达式,或一个字符串。<jsp:param>

name

指定参数名,value指定参数值。参数被发送到一个动态文件,参数可以是一个或多个值,而这个文件却必须是动态文件。JSP基本构成useBean动作<jsp:useBean>标签表示用来在JSP页面中创建一个BEAN实例并指定它的名字以及作用范围。语法:<jsp:useBean

id="name"

scope="page

|

request

|

session

|

application"

typeSpec

/>其中typeSpec有以下几种可能的情况:class="className"

|

class="className"

type="typeName"

|

beanName="beanName"

type="typeName"

|

type="typeName"

|注:必须使用class或type,而不能同时使用class和beanName。beanName表示Bean的名字,其形式为“a.b.c”。JSP基本构成getProperty动作<jsp:getProperty>标签表示获取BEAN属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。语法:<jsp:getProperty

name="name"

property="propertyName"

/>JSP基本构成getProperty动作注:在使用<jsp:getProperty>之前,必须用<jsp:useBean>来创建它。不能使用<jsp:getProperty>来检索一个已经被索引了的属性。能够和JavaBeans组件一起使用<jsp:getProperty>,但不能与Enterprise

Java

Bean一起使用。JSP基本构成setProperty动作<jsp:setProperty>标签表示用来设置Bean中的属性值。语法:<jsp:setProperty

name="beanName"

prop_expr

/>其中prop_expr有以下几种可能:property="*"

|

property="propertyName"

|

property="propertyName"

param="parameterName"

|

property="propertyName"

value="propertyValue"JSP基本构成plugin动作<jsp:plugin>标签表示执行一个applet或Bean,有可能需要下载一个Java插件用于执行它。语法:注:<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要存在浏览器的java插件。

<jsp:plugin

type="bean

|

applet"

code="classFileName"

codebase="classFileDirectoryName"

[

name="instanceName"

]

[

archive="URIToArchive,

..."

]

[

align="bottom

|

top

|

middle

|

left

|

right"

]

[

height="displayPixels"

]

[

width="displayPixels"

]

[

hspace="leftRightPixels"

]

[

vspace="topBottomPixels"

]

[

jreversion="JREVersionNumber

|

1.1"

]

[

nspluginurl="URLToPlugin"

]

[

iepluginurl="URLToPlugin"

]

>

[

<jsp:params>

[

<jsp:param

name="parameterName"

value="{parameterValue

|

<%=

expression

%>}"

/>

]+

</jsp:params>

]

[

<jsp:fallback>

text

message

for

user

</jsp:fallback>

]

</jsp:plugin>JSP基本构成JSP注释JSP有3种类型的注释:HTML注释(输出注释)JSP代码注释(隐藏注释)Java代码注释JSP基本构成HTML注释

HTML注释出现在JSP页面的HTML代码部分,其语法格式为:<!注释内容-->。使用浏览器浏览JSP页面时,注释内容不会在页面上显示,但是通过浏览器查看页面源代码时能够看到,也就是说HTML注释会被发送到客户端,显示时被客户端屏蔽了。JSP基本构成JSP代码注释

JSP注释语法格式为:<%注释内容--%>。该注释虽然写在JSP程序中,但不会发送到客户端,这种注释在JSP编译时被忽略掉了,因此在客户端查看源代码时不能看见注释。JSP基本构成Java代码注释

Java代码注释出现在Java代码区中,即<%和%>之间的区域,不允许直接出现在JSP页面中,遵循Java语言的注释规则,语法格式如下。<%//单行注释内容/*多行注释内容*/%>

这种注释被JSP编译器转换到JSP页面对应的Java源代码中,但不会被发送到客户端,因此使用浏览器浏览JSP页面以及通过浏览器查看页面源代码都不能看到注释。JSP内置对象内置对象(又叫隐含对象)是JSP规范所定义的,由Web容器实现和管理的一些在JSP页面中都能使用的公共对象。这些对象不需要预先声明就可以在代码段和表达式中随意使用。JSP中一共预先定义了9个内置对象,分别为:request、response、session、application、out、pageContext、config、page、exception。下面对其进行详细介绍。JSP内置对象request对象

request对象是javax.servlet.http.HttpServletRequest类的一个实例,它是一个用来表示用户请求信息的对象,作用域为一次请求。该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息(如头信息、系统信息、请求方式以及请求参数等),request对象的方法说明如表3-2所示。JSP内置对象request对象表3-2request对象的方法说明表方法说明objectgetAttribute(Stringname)获取指定属性的值,若值不存在,返回NullEnumerationgetAttributeNames()获取所有可用属性名的枚举StringgetCharacterEncoding()获取字符编码方式intgetContentLength()返回请求体的长度,以字节计数StringgetContentType()获取请求体的MIME类型ServletInputStreamgetInputStream()获取请求体中一行的二进制流StringgetParameter(Stringname)获取参数name的参数值EnumerationgetParameterNames()获取可用参数名的枚举String[]getParameterValues(Stringname)返回包含参数name的所有值的数组StringgetProtocol()获取请求用的协议类型及版本号StringgetScheme()获取请求用的计划名,如:http.https及ftp等StringgetServerName()获取接受请求的服务器主机名

温馨提示

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

评论

0/150

提交评论