框架基础-Servlet与JSP技术回顾.ppt
第3章 框架基础Servlet与JSP技术回顾,主要内容,在MyEclipse中创建Web工程在MyEclipse中编写Servlet在MyEclipse中编写JSPServlet常用APIEL表达式语言JSP常用的指令和动JSTL标准标签库,本章目标,掌握Web应用的文档结构掌握Servlet的编写和访问掌握JSP的编写和访问掌握Servlet常用API掌握EL表达式语言的使用掌握JSP常用的指令和动作掌握JSTL的使用,3.1 创建Web应用,所有JSP和Servlet程序都需要放置在一个合法有效的Web应用中才能被正确地运行和访问。Web应用的目录结构需要满足一定的要求。,3.1.1 Web应用文档结构,每个Web应用都有一个根目录。可以把JSP文件、HTML文件和图片文件等与页面相关的文件直接放在根目录下。但是为了便于管理,通常会建立若干子目录把文件进行分类管理。一般会按照各自功能的不同把Web应用分成若干个模块,把每个模块相关的文件放在一个子目录中。,3.1.1 Web应用文档结构,例如,使用images目录存放图片资源,使用common目录存放共享资源等。另外,在Web应用中有一个重要的子目录WEB-INF,用于存放服务器的配置文件以及在服务器端运行的类文件和一些标签文件等,该目录中的文件是不能通过浏览器访问的。,3.1.1 Web应用文档结构,一个Web应用的文档结构大致如图所示:,3.1.1 Web应用文档结构,WEB-INF文件夹WEB-INF目录中主要有如下几个文件夹或文件:classes文件夹:存放本应用的所有类文件以及properties文件(属性文件)。lib文件夹:也是用于存放类文件的,只是这些文件都是以压缩包(.jar)的形式存在的。web.xml文件:用于描述Web应用的配置信息。,创建一个Web工程,利用集成开发工具可以很方便快速的创建Web应用。在MyEclipse中,提供了“Web Project”这种工程类型,生成Web工程后,其中会自动创建一个有效的Web应用目录,默认根目录名为WebRoot,并且Web应用应具备的一些基本目录和文件都会自动生成。,创建一个Web工程,利用MyEclipse创建一个Web工程的步骤 如下:(1)右击鼠标选择NewProject。(2)工程类型选择MyEclipseJ2EE ProjectsWeb Project。,创建一个Web工程,(3)在Project Name处填写工程名,通常会将工程名默认为Web应用名。单击Finish按钮,Web工程成功创建完毕。,创建一个Web工程,利用MyEclipse创建的Web工程:Web工程中的WebRoot目录即为Web应用的根目录。所有和Web页面相关的资源都存放在WebRoot下。Web工程中的src目录用于存放Java源文件。Web工程的Context root URL属性即为该Web应用的上下文路径。,3.1.3 Web应用配置或部署,Web服务器必须能够找到应用的根目录才可以运行这个Web应用,也就是通常所说的需要把应用发布到服务器上。有两种方式可以完成发布:第一种方式需要把应用放在特定的目录下,在Tomcat中可以把应用放在Tomcat目录下的webapps下面。另一种方式是通过配置文件完成,在配置文件中进行配置,在Tomcat中需要把配置文件放在特定的目录下。,3.1.3 Web应用配置或部署,1.部署Web应用 利用MyEclipse的部署功能,可以将Web应用直接部署到Web服务器上。若使用的是Tomcat服务器,则默认会部署到Tomcat下的webapps目录下。,3.1.3 Web应用配置或部署,2.配置Web应用配置Web应用需要制作一个同名(Web应用名)的XML配置文件。例如:为上面的myweb应用创建同名的配置文件:myweb.xml,文件内容如下:配置文件中:path表示Web应用的根路径;docBase表示Web应用的存放位置;reloadable表示可以在运行时加载classes与lib文件夹下的类和包。存放位置:TOMCAT_HOMEconfCatalinalocalhost目录下。,3.2 Servlet基础,本节主要介绍Servlet的基本概念、原理和开发步骤。,3.2.1 什么是Servlet,Servlet是用Java语言编写的运行在服务器端的小应用程序,能够接收Web客户端的请求,并能对Web客户端进行响应,通常是通过HTTP(HyperText Transfer Protocol)协议进行工作的。可以认为Servlet是服务器端的Applet。只是Applet运行在客户端,而Servlet运行在服务器端。,3.2.2 Servlet的主要方法,Servlet是一个Java类,通常会有3类方法,分别是:init方法,用于初始化。destroy方法,用于释放资源。service方法,服务类方法,对用户的请求进行处理,并对用户进行响应,几乎所有处理功能都在这里完成。这类方法可以有多个,最常用的是doGet和doPost方法。,3.2.3 Servlet运行原理,1.Servlet的工作过程如下 Servlet容器接收到客户端的请求时,先判断用户所请求的Servlet对象是否存在。如果不存在,则加载Servlet类、创建Servlet对象并实例化,然后调用init方法进行初始化。容器创建request和response对象,并且创建一个线程,调用Servlet对象的service方法(间接调用doGet方法或者doPost方法)。service方法产生响应,容器将响应发回客户端。容器销毁reqeust和response对象以及相应的线程。注意:加载Servlet类、创建对象、调用初始化方法init和销毁方法destroy都只有一次。当Web应用被卸载或者服务器被关闭的时候,系统卸载Servlet,调用destroy方法释放资源。,3.2.3 Servlet运行原理,2.Servlet的加载有两种方式:第一次请求的时候加载。服务器启动的时候加载。,3.2.4 MyEclipse中开发Servlet,利用MyEclipse,可以在Web工程中非常方便地创建Servlet程序,并且可以根据需要为程序员自动生成其中的大部分方法。程序员只需在此基础上进行修改就可以快速开发出自己的程序。,3.2.4 MyEclipse中开发Servlet,利用MyEclipse开发Servlet的步骤如下:(1)在小节中创建的myweb工程的src目录上,右击鼠标,选择NewServlet。(2)在Name处输入Servlet名字,如MyServlet,单击Next按钮。,3.2.4 MyEclipse中开发Servlet,(3)在Servlet/JSP Mapping URL处配置Servlet的mapping url信息,如:/test/MyServlet。此处配置的mapping url即为将来访问Servlet时的地址格式。单击Finish按钮结束。,3.2.4 MyEclipse中开发Servlet,(4)查看生成的Servlet源文件:在Eclipse环境中,创建Servlet时可以选择自动生成构造方法、init方法、destroy方法、doGet方法和doPost方法。,3.2.4 MyEclipse中开发Servlet,(5)查看生成的Servlet源文件:MyEclipse会为新建的Servlet在web.xml中自动生成相应的配置代码。每个Servlet在web.xml中都对应一对标签和一对标签。其中:标签用于声明Servlet。其中的子标签又包括:用于声明Servlet的名字,是web.xml中内部使用的名字。标签:用于声明Servlet所对应的类名。标签用于进行Servlet映射。其中的子标签又包括:标签:表示Servlet的名字,需要和上面标签的子标签中声明的名字保持一致。标签:用于配置Servlet的访问地址。,3.2.4 MyEclipse中开发Servlet,(6)测试Servlet的运行:可以通过以下3种方式进行:通过在浏览器中直接输入地址访问:http:/127.0.0.1:8080/myweb/test/MyServlet通过超链的形式访问:第一个Servlet通过表单提交的方式访问:,3.2.4 MyEclipse中开发Servlet,启动Tomcat服务器,使用第一种方式,即在浏览器地址栏中直接输入地址访问:http:/localhost:8080/myweb/test/MyServlet运行效果如下:,开发Servlet基本流程,由于MyEcilpse自身具有的强大功能,上面开发Servlet的过程中某些操作已经由MyEclipse自动完成,极大的方便了程序员开发程序。但当脱离集成开发工具时,对开发一个Servlet的基本流程也应有所了解。,开发Servlet基本流程,开发一个Servlet程序基本包括以下几步:(1)编写Servlet引入用到的包,需要的导入的包有:javax.servlet.*,javax.servlet.http.*等定义类的基本框架并继承HttpServlet重写成员方法。如果需要对Servlet进行初始化,需要重写init方法。如果需要在卸载Servlet的时候执行一些功能,可以重写destory方法。一般情况下,根据需要完成的功能只需要重写服务类方法即可。服务类方法包括doGet方法和doPost方法等。,开发Servlet基本流程,(2)编译Servlet在MyEcilpse中,.java文件会在保存后自动编译。若未安装MyEcilpse,则需要程序员手工编译Servlet。需要事先把位于%TOMCAT_HOME%commonlib下的servlet-api.jar压缩包添加到环境变量中。使用JDK中的javac命令编译。,开发Servlet基本流程,(3)配置ServletServlet编写完之后,作为Web应用的组成部分,需要在配置文件web.xml中进行配置。具体配置代码和节列出的web.xml文件中的配置代码相同。,开发Servlet基本流程,(4)部署ServletServlet编写完成之后,需要部署到服务器才能访问,编译好的文件需要放在Web应用的WEB-INFclasses下面。利用MyEclipse创建的Servlet,成功编译后其.class文件已自动放置到WEB-INFclasses目录下。,开发Servlet基本流程,(5)测试Servlet测试方式和节相同。访问Servlet时,要使用在web.xml中配置的url地址格式进行访问。,3.3 JSP基础,本节主要介绍JSP的运行原理、基本语法。,3.3.1 JSP运行原理,由于使用Servlet编写页面程序显得非常繁琐,因此,Sun公司后来在Servlet的基础上推出了JSP。在JSP文件中,可以直接书写HTML标签,并嵌入JSP标签以及Java脚本,很大程度的简化了动态Web页面的开发。虽然JSP和Servlet在语法上有较大区别,但JSP实质上最终是作为Servlet在服务器上运行的。也就是说,所有的JSP文件最终会被Web服务器自动转换为Servlet并加载运行。,3.3.1 JSP运行原理,JSP在服务器端的工作过程如下:当服务器第一次接收到客户端对JSP文件的请求后,由JSP引擎将对应的JSP文件自动转换成Servlet。JSP引擎调用服务器端的Java编译器对Servlet代码进行编译,生成字节码文件。服务器将字节码文件加载到内存运行。运行结果一般为HTML格式的文件,返回给客户端。注意:只有第一次访问JSP文件的时候需要把JSP文件转换成Servlet并进行编译,再次访问时只要该JSP文件没有被改动,JSP引擎就直接调用已加载的Servlet。所以,第一次访问JSP文件的响应速度较慢。,3.3.1 JSP运行原理,JSP的运行原理图如下所示:,3.3.2 编写简单的JSP,在MyEclipse中同样可以很方便的创建一个JSP文件。步骤如下:(1)在myweb工程下的WebRoot目录上,右击鼠标,选择NewJSP。(2)在File Name处输入文件名,如test.jsp,单击Finish按钮。,3.3.2 编写简单的JSP,(3)测试JSP页面的运行访问JSP的时候,与Servlet相似,需要提供以下几个信息:到每个Web应用的根路径,本节实例中是http:/localhost:8080/myweb。文件,必须指出要访问的文件名,本节实例中的文件名是test.jsp。,3.3.2 编写简单的JSP,若要访问test.jsp,需要在浏览器中输入如下地址:http:/localhost:8080/myweb/test.jsp启动Tomcat服务器,运行效果如下:,3.4 Servlet常用API,由于Servlet自身的特点,在本书将要实现的系统中,主要采用Servlet完成页面和业务处理模块之间的中转控制功能。由于采用HTTP协议进行通信,所有自己编写的Servlet类均继承自HttpServlet。下面对HttpServlet、HttpServletRequest、HttpServletResponse、RequestDispather、HttpSession和ServletContext接口中常用的方法进行介绍。,3.4 Servlet常用API,HttpServlet的常用方法有:处理get请求和post请求的方法:doGet()和doPost();在方法中,若需要获取客户端请求相关的信息,则访问方法的第一个参数(HttpServletRequest类型),若需要发回给客户端响应信息,则利用方法的第二个参数(HttpServletResponse类型)。初始化方法:init()。在销毁Servlet实例前调用的方法:destroy()。获取ServletContext对象的方法:getServletContext()。,3.4 Servlet常用API,HttpServletRequest的常用方法有:获取单值请求参数的方法:getParamter();获取多值请求参数的方法:getParameterValues();获取请求参数名字的方法:getParameterNames();获取session对象的方法:getSession();获取Web应用根路径的方法:getContextPath();获取Servlet路径的方法:getServletPath();获取request中的属性的方法:getAttribute();设置request中的属性的方法:setAttribute();获取请求转发对象的方法:getRequestDispatcher();,3.4 Servlet常用API,HttpServletResponse的常用方法有:重定向方法:sendRedirect();RequestDispatcher的常用方法有:进行请求转发的方法:forward();HttpSession的常用方法有:获取session中的属性的方法:getAttribute();设置session中的属性的方法:setAttribute();使session失效的方法:invalidate();ServletContext的常用方法获取ServletContext中的属性的方法:getAttribute();设置ServletContext中的属性的方法:setAttribute();获取真实路径的方法:getRealPath();,3.5 JSP常用技术,本节主要回顾一下JSP中的实用语法,并着重介绍JSP2.0中新引入的语法特性。,3.5.1 EL简介,EL全名为ExpressionLanguage,它原本是JSTL1.0为方便存取数据所自定义的语言。当时EL只能在JSTL标签中使用,但是不能直接在JSP网页中使用。到了JSP2.0之后,EL已经正式纳入成为标准规范之一。,3.5.1 EL简介,所有EL都是以“$”为起始、以“”为结尾的。例如:$sessionScope.username,从sessionScope的范围中读取名为username的变量值并输出。“.”与“”操作符EL提供.和两种操作符来存取数据。下列两者所代表的意思是一样的:$等于$sessionScope.useremail。“.”和“”也可以同时混合使用,如下:$sessionScope.list0.price返回结果为list中第一个元素的“price”属性值。,3.5.1 EL简介,EL中同样也提供了内置对象供开发者使用,一共提供了11个内置对象,如下表所示:,3.5.2 JSP常用指令和动作,1.JSP常用指令page指令page指令用于定义JSP页面相关的属性。其中,最常用的是pageEncoding属性,该属性用于指定JSP页面的字符编码,默认值是西欧字符编码“ISO-8859-1”。本书所编写的JSP页面均采用”UTF-8”字符集,因此,需要在JSP页面头部加入如下page指令:,3.5.2 JSP常用指令和动作,include指令include指令用于在代码编译阶段包含指定的源文件。当编译时遇到include指令时,就会读入被包含文件并在include指令处展开,即被包含文件和包含文件形成一个文件统一参与编译。例如,要在文件a.jsp中包含根目录下的common下的页脚文件footer.jsp,则使用如下include指令:,3.5.2 JSP常用指令和动作,taglib指令taglib指令用于引入JSP页面中需要使用的标签库。只有在页面中引入标签库后,才能使用标签库中定义的标签。例如,要在页面中使用核心标签库,则需要加入如下的taglib指令:,3.5.2 JSP常用指令和动作,2.JSP常用动作JSP2.0规范中,共定义了20种标准动作。本学期会经常使用到其中的useBean动作。useBean动作若要在JSP页面中使用JavaBean对象,需要使用useBean动作。若useBean动作中,id属性所指定的JavaBean对象在scope属性所指定的作用域中已存在,则使用已存在的对象;若同名对象不存在,则创建一个新对象。例如,要在页面中创建一个名为now的对象,作用范围为session,则使用如下useBean动作:,3.5.3 JSTL简介,JSTL(JSP StandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如Tomcat 4.x。但是JSP 2.0规范中是作为标准支持的。,3.5.3 JSTL简介,JSTL包含5类标准标签库:核心标签库、格式标签库、XML标签库、SQL标签库和函数标签库。本书主要使用的是JSTL核心标签库和格式标签库中的一些常用标签,有以下几种:,3.5.3 JSTL简介,1.通用标签标签:用于在JSP中显示数据标签:用于保存数据标签:用于删除数据,3.5.3 JSTL简介,2.流程控制标签标签:用于条件判断、标签:用于多重条件判断,3.5.3 JSTL简介,3.循环控制标签标签:用于循环控制 4.日期格式化标签标签:用于将日期和时间按照客户端的时区和指定的格式来显示,小结,本章主要介绍了Servlet、JSP的工作原理、运行方式以及基本语法。并介绍了利用MyEclipse工具创建Web工程、JSP文件和Servlet的步骤。对于Servlet,要求能编写简单的Servlet程序并知道如何在JSP和Servlet之间进行互相调用和传递信息等。对于JSP,要求重点掌握JSP2.0规范中引入的EL语法,并会使用JSTL常用标签完成页面中的一些较复杂的控制。利用MyEclipse可以很方便的创建Web工程,并在相应位置创建JSP或Servlet程序。要会使用正确的方式访问JSP页面和Servlet。,