1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第1章搭建开发环境本章通过StepbyStep的方式,演示在Windows下如何安装JDK,安装服务器Tomcat以及开发工具Eclipse,并安装MyEclipse插件.
最后将介绍通过使用MyEclipse来进行Web开发.
通过本章的学习,读者应该能够达到如下几个目标.
安装JDK,并配置环境变量.
安装Tomcat,并配置虚拟目录.
安装Eclipse,并安装MyEclipse插件.
使用MyEclipse新建Web项目.
使用MyEclipse整合Tomcat服务器.
使用MyEclipse部署项目.
这些是学习本章的目标,同时也是对读者的基本要求.
学好本章是学习以后知识的基础,读者一定要熟练地掌握本章的知识.
1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
1下载并安装JDK如果需要运行有关的Java程序,就需要安装JRE(JavaRuntimeEnvironment),即Java运行时环境.
而如果需要编译并执行有关Java程序,这时就必须安装安装JDK(Java2SoftwareDevelopmentkit),即Java软件开发工具包.
本节将详细介绍如何下载并安装JDK,并介绍如何配置环境变量,最后讲通过一个简单的Java程序示例来验证JDK是否成功安装.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
1.
1下载JDK下载JDK非常简单,只需按照如下步骤,即可从SUN公司的官方网站获得免费的JDK,步骤如下.
Java官方首页1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
1.
2安装JDK下载完成后,进行安装,下面介绍windowsXP下的JDK安装步骤.
许可证协议确认JDK安装完成界面1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
1.
3配置环境变量JDK安装成功了,但是目前还不能够使用控制台来编译和运行Java程序.
要想使用控制台来编译和运行Java程序,还需要配置系统环境变量.
配置系统环境变量的步骤如下.
高级选项卡环境变量配置窗口1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
1.
4一个简单的Java程序01publicclassHelloWorld{02publicstaticvoidmain(Stringargs[]){03System.
out.
println("Hello,World!
");//控制台输出Hello,Wo04}05}通过前面的步骤,已经安装好了JDK,并配置好了环境变量,这时就可以在控制台编译并运行Java程序了.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
2下载并安装Tomcat如果需要进行JavaWeb开发,还需要安装Web服务器,这里选择Tomcat服务器.
Tomcat服务器是由Apache开源组织开发并维护的,能够支持JSP和Servlet开发使用,而且Tomcat服务器是免费产品,并且提供了其源代码.
本节将详细介绍如何下载并安装Tomcat服务器,并介绍如何配置虚拟目录,最后讲通过一个简单的JSP程序示例来验证Tomcat服务器是否成功安装.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
2.
1下载Tomcat下载Tomcat服务器非常简单,只需按照如下步骤,即可从Apache的官方网站获得免费的Tomcat,步骤如下.
Apache官方首页1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
2.
2安装Tomcat下载完成Tomcat服务器以后,就可以通过下载的压缩文件夹来安装Tomcat,步骤如下.
第一步:安装Tomcat非常简单,只需要将下载好的"apache-tomcat-6.
0.
18.
zip"解压.
如解压到"E:\apache-tomcat-6.
0.
18"目录下.
第二步:打开安装目录下的"bin"文件夹,找到其中的"startup.
bat",双击该批处理文件.
第三步:当控制台输出如"Serverstartupin604ms"的文本则表示Tomcat服务器启动成功.
打开IE浏览器,在地址栏输入"http://localhost:8080",打开页面如图1-15所示,则表示Tomcat服务器安装成功.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
2.
3配置虚拟目录虚拟目录即为保存网站资源如JSP等文件的目录,配置虚拟目录分为如下几个步骤.
第一步:在磁盘的任意位置创建一个文件夹,如"E:\JavaWebAPP".
该文件夹即为虚拟目录地址.
第二步:在虚拟目录中创建一个名为"WEB-INF"的文件夹,并在该文件夹中创建一个web.
xml文件.
第三步:打开Tomcat安装目录conf文件夹中的server.
xml,找到文件最末端的"",在其上面一行添加如下代码.
第四步:为了使得虚拟目录生效,还需要使Tomcat服务器重新加载server.
xml文件,所以必须重启Tomcat服务器.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
2.
4一个简单的JSP程序下面通过一个简单的JSP程序来验证虚拟目录是否配置成功.
010203第一个JSP程序04050609101-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
3下载并安装EclipseEclipse是一个开放源代码、基于Java的可扩展开发平台.
就Eclipse本身而言,它只是一个框架和一组被称为平台核心的服务程序,用于通过插件组件构建开发环境.
通过Eclipse开发平台可以很方便的进行Java程序开发,同时如果需要进行JavaWeb开发,则只需安装相应的插件即可.
本节将详细介绍如何下载并安装Eclipse.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
3.
1下载Eclipse下载Eclipse非常简单,只需按照如下步骤,即可从Eclipse的官方网站获得免费的Eclipse,步骤如下.
第一步:打开Eclipse官方站点首页"http://www.
eclipse.
org/".
第二步:单击导航栏中的"DOWMLOADS"链接,进入Eclipse下载页面.
第三步:在下载列表中找到"EclipseClassic3.
4.
1"下载链接,单击其下面的"Otherdownloads"链接进入Eclipse各版本下载页面.
第四步:在"LatestReleases"栏目下找到"3.
3.
2"链接,单击进入Eclipse3.
3.
2版本下载页面.
第五步:单击"Downloadnow"右边的"EclipseSDK"链接跳转到各平台下载列表.
第六步:选择相应的平台,如Windows,单击"Download"栏目下的"eclipse-SDK-3.
3.
2-win32.
zip"链接,即可进行下载.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
3.
2安装Eclipse下载完成Eclipse以后,就可以通过下载的压缩文件夹来安装Eclipse,步骤如下.
第一步:要解压下载下来的"eclipse-SDK-3.
3.
2-win32.
zip".
第二步:双击其中eclipse.
exe即可运行Eclipse.
1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
4下载并安装MyEclipse单纯的Eclipse只能进行Java桌面开发,如果要进行JavaWeb开发,还需要安装Eclipse插件.
众多软件厂商和开源组织开发了相应的插件,其中以MyEclipse插件最为出名并常用.
MyEclipse是一个由众多插件结合的插件集合,通过安装它可以很方便的进行JavaWeb开发.
下面将详细介绍如何下载并安装MyEclipse.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
4.
1下载MyEclipse下载MyEclipse非常简单,只需按照如下步骤,即可从MyEclipse的官方网站获得试用版的MyEclipse,步骤如下.
第一步:打开MyEclipse的官方站点"http://www.
myeclipseide.
com/".
第二步:单击左边导航栏中的"Try/Download"链接.
第三步:该页面有两个下载项目,一个是"MyEclipse6.
5GA",一个是"MyEclipseblue".
单击其中的"MyEclipse6.
5GA"进入其下载页面.
第四步:MyEclipse6.
5GA的安装分为两种,一种是"AllinONE"版本,一种是"pulse"版本.
其中"AllinONE"版本包含MyEclipse安装的全部文件,而"pulse"版本为插件安装版本,需要事先安装好了相应的Eclipse.
这里为了安装方便,选择下载其中的"AllinONE"版本.
1-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
4.
2安装MyEclipse下载完成MyEclipse以后,就可以通过下载的执行文件安装MyEclipse,步骤如下.
第一步:双击下载下来的MyEclipse_6.
5.
1GA_E3.
3.
2_Installer.
exe文件.
第二步:单击其中的【Next】按钮,进入安装的下一步.
第三步:在打开的许可证协议确认界面中选择"Iacceptthetermsofthelicenseagreement"选项,单击【Next】按钮进入一下步.
第四步:单击其中的【Change】按钮即可选择自定义的安装目录,如"E:\MyEclipse6.
5",选择完成后,单击其中的【Next】按钮进入下一步.
第五步:该界面为安装确认页,如果希望修改安装配置,可以单击其中的【Back】按钮;如果安装配置无误,则单击【Install】按钮进行安装.
第六步:等待数分钟后,MyEclipse安装完成,打开安装完成页面,单击其中的【Finish】按钮完成安装.
1-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
5使用MyEclipse进行Web开发MyEclipse插件提供了非常强大的Web开发支持,通过其可以非常简单和方便的进行Web开发.
本节将详细介绍如何通过MyEclipse新建Web项目、新建JSP页面、整合Tomcat以及部署项目.
1-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
5.
1使用MyEclipse新建Web项目使用MyEclipse新建Web项目非常简单,只需按照如下步骤.
第一步:运行MyEclipse开发环境,在Package视图中单击右键,选择【New】|【WebProject】,打开【NewWebProject】.
第二步:在【ProjectName】文本框中输入Web项目的名称.
【Sourcefolder】文本框用来输入项目源文件的储存文件夹,一般采用默认文件夹,也就是是"src".
【Webrootfolder】文本框中用来输入Web项目文件的存放的文件夹,一般也采用默认文件夹,也就是"WebRoot".
【ContextrootURL】文本框用来输入访问该站点的根路径,在默认情况下为"/"加上项目名称.
【J2EESpecificationLevel】用来选择J2EE规范版本.
至于Maven和JSTL支持,则根据实际情况来选择是否添加.
第三步:完成项目配置后,单击【Finish】按钮,完成Web项目的创建.
在Package视图窗口中将能看到该项目名,单击该项目名即可展开该项目,并能看到项目中的所有文件以及类库等信息.
1-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
5.
2MyEclipse中新建JSP页面在MyEclipse中新建JSP页面非常简单,只需按照如下步骤.
第一步:在Package视图中找到Web项目中的WebRoot文件夹,单击右键选择【New】|【JSP】.
第二步:选择完成后,将打开【CreateanewJSPpage】对话框.
第三步:在其中的【FileName】文本框中输入JSP文件的文件名,单击【Finish】按钮完成JSP页面的新建.
这时MyEclipse会自动打开新建的JSP页面.
这时就可以通过MyEclipse提供的JSP页面编辑器来编辑JSP页面了.
1-21北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
5.
3MyEclipse整合TomcatMyEclipse提供了对Web服务器很好的整合策略,通过MyEclipse整合Tomcat,即可很方便的通过MyEclipse来调试或发布Web项目,整合步骤如下.
第一步:单击"Window"菜单.
在弹出的菜单选项中选择【Rreference】菜单项.
第二步:在【Rreference】窗口中展开左边导航树中的【MyEclipseEnterpriseWork】选项,再展开【Servers】子选项,选择当中的【Tomcat】.
第三步:在右边的窗口中选择Tomcat的版本,这里选择单击"ConfigureTomcat6.
x"来配置Tomca6.
x版本的服务器.
第四步:要整合Tomcat,显然应该选中【Enable】单选框,表示该Tomcat服务器为可用.
在【Tomcatbasedirectory】文本框中输入Tomcat的安装目录,或者单击【Browse】按钮来在本地磁盘中选择Tomcat的安装目录.
指定正确的Tomcat安装目录后,下面的两个文本框会自动进行输入,无需再设置.
第五步:单击右边的【Apply】按钮提交,单击【OK】按钮完成配置.
1-22北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
5.
4MyEclipse部署项目通过MyEclipse可以非常方便的部署项目,步骤如下.
第一步:在Eclipse主界面中单击部署Web应用的工具按钮,.
第二步:在该对话框的"Project"下拉列表中选择需要部署的Web应用.
单击右边的【Add】按钮,将打开用来选择Web服务器的对话框.
第三步:在【Server】下拉列表中选择开始配置好的【Tomcat6.
x】服务器,其他选项采用默认配置.
单击【Finish】按钮,完成服务器的配置,页面回到Web应用部署对话框,单击【OK】按钮完成Web应用部署.
第四步:Web应用部署完成后,单击Eclipse主界面工具栏中的按钮旁的小三角,出现下拉菜单.
选择【Tomcat6.
x】|【Start】菜单项.
启动Tomcat服务器.
第五步:打开浏览器,访问登录页地址"http://localhost:8080/Prj_test/FirstJSP.
jsp".
1-23北京源智天下科技有限公司联系方式:http://www.
rzchina.
net1.
6小结本讲通过详细的步骤,详细介绍了如何下载并安装JDK、Tomcat服务器以及开发工具Eclipse及MyEclipse插件.
同时还介绍了如何配置环境变量以及虚拟目录.
最后还介绍了如何使用MyEclipse新建Web项目、JSP页面,以及MyEclipse整合Tomcat服务器以及部署项目.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第2章JSP的基础语法本章将详细介绍什么是JSP,JSP具有哪些特点.
还将介绍JSP的运行机制以及JSP的脚本元素.
通过本章的学习,读者应该能够完成如下几个目标.
了解JSP的基本特点.
理解JSP的运行机制熟练使用JSP声明语句熟练使用JSPScriptlets熟练使用JSP表达式1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
1JSP简介JSP是JavaServerPages的缩写,是由SunMicrosystem公司于1999年6月推出的新技术.
通过在传统的HTML中,利用插入JSP脚本代码从而构成JSP页面.
JSP是基于JavaServlet以及整个Java体系的Web开发技术,利用这一技术来构建安全的、跨平台的动态Web站点,而且目前在不断进行更新和优化.
如果读者对微软的ASP技术比较熟悉,应该知道ASP的编程语言是VBScript和JavaScript,JSP使用的是Java.
与ASP相比,在许多方面有了大大的改进,具有动态页面与静态页面想分离,并摆脱系统平台的束缚.
JSP是通过编译后执行的,完全克服了ASP的脚本级解释执行的缺点,目前以成为Web开发的主流选择.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
2JSP运行机制可以把执行JSP页面的执行分成两个阶段,一个是转译阶段,一个是请求阶段.
转译阶段:JSP页面转换成Servlet类.
请求阶段:Servlet类执行,将响应结果发送至客户端.
下面来看JSP的执行流程示意图,示意图如图1-2所示.
HelloJSP.
jspHelloJSP_jsp.
javaHelloJSP_jsp.
class1.
JSP2.
3.
4.
5.
6.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
2JSP运行机制1.
用户(客户机)访问响应的JSP页面,如http://localhost:8080/Prj_test/ch02/HelloJSP.
jsp.
2.
服务器找到相应的JSP页面.
3.
服务器将JSP转译成Servlet的源代码.
4.
服务器将Servlet源代码编译为class文件.
5.
服务器将class文件加载到内存并执行.
6.
服务器讲class文件执行后生成HTML代码发送给客户机,客户机浏览器根据响应的HTML代码进行显示.
如果该JSP页面为第一次执行,那么会经过这两个阶段,而如果不是第一次执行,那么将只会执行请求阶段.
这也是为什么第二次执行JSP页面时明显比第一次执行要要快的原因.
如果修改了JSP页面,那么服务器将发现到该修改,并重新执行转译阶段和请求阶段.
这也是为什么修改页面后访问速度变慢的原因.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
3JSP脚本元素JSP脚本元素包含JSP声明语句、JSPScriptlets、JSP表达式.
下面将详细介绍JSP脚本元素的语法格式以及使用方法.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
3.
1JSP声明语句JSP声明语句以作为结束,其语法格式为:.
使用声明语句声明的变量为全局变量,也就是说如果有多个用户在执行此JSP页面时,将共享该变量.
示例程序如下.
010203DeclarationsDemo0405060711121-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
3.
2JSPScriptletsJSPScriptlets以作为结束,其中包含有效的符合Java语法规则的Java代码,其语法格式为:.
在JSPScriptlets中可以包含多个语句,如:方法、变量、表达式等.
示例程序如下.
010203JavaScriptletsDemo04050610111-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
3.
3JSP表达式JSP表达式通过结束,其语法格式为:.
JSP表达式中的代码会首先执行,然后转换成字符串并显示到网页上.
010203DeclarationsDemo0405060910111-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
4注释JSP的注释分为两类,一类为可以在客户端显示的注释,即HTML注释;一类是不能在客户端显示的注释,即JSP注释.
HTML注释使用作为结束,中间包含的代码即为注释部分.
JSP注释使用作为结束,中间包含的代码即为注释部分.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
5综合练习1、声明变量a、b、c,并对a和b进行运算,并将运算结果值赋值给c,最后在网页上输出变量c的值.
2、修改上面的示例,使用JSP表达式输出变量c的值.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net2.
6小结本章详细介绍了什么是JSP,以及JSP具有哪些特点,还详细介绍了JSP的运行机制.
通过实例介绍了JSP声明语句、JSPScriptlets、JSP表达式的使用.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第3章JSP指令元素本章将详细介绍JSP的指令元素,包括page指令、include指令以及taglib指令.
通过本章的学习,读者应该能够完成如下几个目标.
熟练使用page指令以及各属性的配置熟练使用include指令来包含各种文件了解使用taglib指令来引入标签库,并定义其前缀1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1page指令page指令主要用来设定JSP页面的全局属性,该配置将作用于整个JSP页面,甚至包括静态包含的文件.
其语法格式如下.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
1language属性language属性主要用来声明所使用的脚本语言种类,目前暂时只能使用Java语言.
不过不排除以后可以使用如C、C++或其他语言的可能.
language属性的默认值也是java.
其属性配置语法格式如下.
示例代码:TestLanguage.
jsp1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
2extends属性extends属性用来指定该JSP页面生成的Servlet是继承于哪个父类,设定时必须指定该类的全名,即包名加类名.
一般很少使用,而且必须慎重的使用,否则可能限制到JSP的编译能力.
其属性配置语法格式如下.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
3import属性import属性用来指定导入的Java包,和Java语言基础中的import语句作用类似.
不过有些包在JSP编译时就已经导入了,可以不用再进行导入,默认导入的包如下.
java.
lang.
*;javax.
servlet.
*;javax.
servlet.
jsp.
*;javax.
servlet.
http.
*;import属性的配置语法格式如下.
示例代码:TestImport.
jsp1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
4session属性session属性用来指定该JSP页面中是否可以使用session对象.
如果设置为true,则表示该JSP页面中可以使用session对象;如果设置为false,则表示该JSP页面中不可以使用session对象.
session属性的默认值为true.
其属性配置语法格式如下.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
5buffer属性buffer属性用来指定输出流是否具有缓冲区,以及设置缓冲区大小.
如果设置为none,则表示输出流不具有缓冲功能;如设置为具体的数据,如"40KB",则表示设置的缓冲区大小为40KB.
其默认值为8KB.
其属性配置语法格式如下.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
6autoFlush属性autoFlush属性用来指定缓冲区是否自动进行强制输出.
如果设置为true,那么当缓冲区满的时候仍然能够输出正常;如果设置为false,那么当缓冲区满的时候,将会产生异常.
如果buffer属性设置为none,那么就不能将autoFlush属性设置为false.
autoFlush属性的默认值为true.
其属性配置语法格式如下.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
7isThreadSafe属性isThreadSafe属性用来指定该JSP文件是否支持多线程使用.
如果设置为true,则表示该JSP文件支持多线程的使用,也就是表示该JSP文件能够同时处理多个用户的请求;如果设置为false,则表示该JSP文件不支持多线程的使用,也就是表示该JSP文件只能一次处理一个用户的请求.
isThreadSafe属性的默认值为true.
其属性配置语法格式如下.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
8info属性info属性用来设置该JSP文件的相关信息,可以是任何的信息字符串,并通过Servlet.
getServletInfo方法来取得该信息.
其属性配置语法格式如下.
示例代码:TestInfo.
jsp1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
9errorPage属性errorPage属性用来设置如果当前JSP文件发生异常错误时,网页重新跳转到能够处理异常的JSP文件.
其属性配置语法格式如下.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
10isErrorPage属性isErrorPage属性用来指定该JSP文件是否为能够处理异常的JSP文件,其默认值为false.
其属性配置语法格式如下.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
11contentType属性contentType属性用来指定该JSP文件的MIME格式,以及网页编码格式.
其属性配置语法格式如下.
示例代码:TestContentType.
jsp1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
12pageEncoding属性pageEncoding属性用来指定网页的编码格式.
其属性配置语法格式如下.
示例代码:TestPageEncoding.
jsp1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
1.
13isELIgnored属性isELIgnored属性用来指定该JSP文件是否支持EL表达式.
如果设置为true,则表示JSP文件讲忽略EL表达式,也就是EL表达式不会被执行;如果设置为false,则表示EL表达式不会被忽略,该EL表达式将会被执行.
其属性配置语法格式如下.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
2include指令include指令用于在JSP文件中插入一个包含文本或者代码的文件.
包含的文件可以是一个HTML文件,或者是一个文本文件,当然也可以是一个JSP文件.
使用include指令包含文件,将会被包含的文件所执行的结果插入到JSP文件放置include指令的位置.
只有当被包含的文件执行完成,该JSP文件才会恢复执行.
include指令的语法格式如下.
其中include指令只有一个属性值,也就是file,其属性值为被包含文件的URL地址.
1-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
2.
1包含文本文件使用include指令包含文本文件非常简单,只需通过file属性指定被包含的文本文件URL地址即可.
01020304包含文本文件050607包含文本文件,文件内容如下.
0809101-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
2.
2包含HTML文件使用include指令包含HTML文件非常简单,只需通过file属性指定被包含的HTML文件的URL地址即可.
01020304包含HTML文件050607包含HTML文件,文件内容如下.
0809101-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
2.
3包含JSP文件使用include指令包含JSP文件非常简单,只需通过file属性指定被包含的JSP文件的URL地址即可.
01020304包含JSP文件050607包含JSP文件,文件内容如下.
0809101-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
3taglib指令taglib指令用来声明此JSP文件使用了自定义的标签,同时引用所指定的标签库以及设置标签库的前缀.
其语法格式如下.
taglib指令包含两个属性,分别为uri和prefix.
其中uri属性用来指定标签库的存放位置,prefix属性用来指定该标签库使用的前缀.
示例代码:TestTaglib.
jsp1-21北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
4综合练习1、在同一个JSP文件中使用include指令分别来包含一个文本文件,一个HTML文件以及一个JSP文件.
2、在JSP文件中使用page指令的import属性导入"java.
util.
*"包,通过构造一个ArrayList实例对象并添加元素.
最后通过使用JSP表达式分别输出ArrayList实例对象中的元素.
1-22北京源智天下科技有限公司联系方式:http://www.
rzchina.
net3.
5小结本章详细介绍JSP的page指令以及其属性的设置与作用.
同时还介绍了使用include指令来包含文件,以及使用taglib指令来引用所指定的标签库以及设置该标签库的前缀.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第4章JSP动作元素本章将介绍JSP的动作元素的作用,并对JSP动作元素进行分类.
将详细介绍其中的JSP基本动作元素,包括、、、、、.
熟练使用动作元素来包含文件.
熟练使用动作元素来实现页面跳转.
熟练使用动作元素来传递参数.
了解使用动作元素来执行Applet.
1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
1JSP动作元素分类JSP动作元素可以用来动态的包含文件、网页跳转以及使用JavaBean组件等等.
JSP动作元素的语法如下.
或者JSP动作元素分为如下五类.
第一类是与存取JavaBean有关的,包括如下三个动作元素.
、、第二类是JSP基本动作元素,也是JSP1.
2就开始有的动作元素,包括如下六个动作元素.
、、、、、1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
1JSP动作元素分类第三类是JSP2.
0新增的动作元素,主要与JSPdocument有关,包括如下六个动作元素.
、、、、、第四类也是JSP2.
0新增的动作元素,主要用来动态的生成XML元素标签的值,包括如下三个动作元素.
、、第五类也是JSP2.
0新增的动作元素,主要用来TagFile中,包括如下两个动作元素.
、1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
2动作元素动作元素用来包含静态和动态的文件.
如果被包含的文件为静态的文件,那么只是单纯的加到JSP页面中,不会进行任何处理;如果被包含的文件为动态的文件,那么会先进行处理,然后将处理的结果加到JSP页面中.
动作元素的语法格式如下.
动作元素包含两个属性,page和flush.
其中page属性用来指定被包含文件的URL地址.
flush属性用来指定缓冲区满时,是否进行清空.
如果设置为true,那么缓冲区满时将进行清空;如果设置为false,那么缓冲区满时不会进行清空.
flush属性的默认值为false.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
2.
1使用动作元素包含静态的文件动作元素用来包含静态的文件时,那么只是单纯的加到JSP页面中,不会进行任何处理.
01020304包含静态文件050607使用jsp:include动态元素包含静态文件0809101-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
2.
2使用动作元素包含动态的文件动作元素用来包含的文件为动态的文件,那么会先进行处理,然后将处理的结果加到JSP页面中.
01020304包含动态文件050607使用jsp:include动态元素包含动态文件08当前日期与时间:09101-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
2.
3和的区别使用指令元素只是将页面的内容静态的包含进来,如果被包含的文件中有JSP代码,则会执行该代码,而不管该文件是否为动态文件.
动作元素动态的包含文件,如果被包含的文件是静态的,则直接将内容包含进行,不会进行处理;而如果被包含的文件是动态的,则先执行,再将结果包含进行并进行显示.
动作元素和指令元素的区别如下.
使用指令元素是将所以的被包含文件包含进来之后,然后再进行编译等处理,可以简单的称其为先包含再处理.
而使用动作元素是先将所以的代码处理完成之后,再将处理完成的代码的结果包含进行,可以简单的称其为先处理再包含.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
3动作元素动作元素用来转移用户的请求,使得用户请求的页面从一个页面跳转到另一个页面.
这种跳转为服务器端跳转,所以用户的地址栏不会发生任何的变化.
动作元素的语法格式如下.
动作元素只包含一个属性即page,page属性用来指定跳转文件的URL地址.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
3.
1使用动作元素实现页面跳转01020304jsp:forward动作指令050607使用jsp:forward动作指令实现服务器端跳转.
0809101-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
3.
1使用动作元素实现页面跳转01020304跳转到的页面050607跳转到的页面08091-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
3.
2跳转执行流程如果JSP文件包含动作元素,那么JSP会首先执行动作元素之前的代码.
只有执行到动作元素时才会进行跳转,跳转完成后将执行被跳转的JSP文件,动作元素之后的代码将不会被执行到.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
4动作元素动作元素用来传递参数,一般与、作用联合使用.
其语法格式如下.
动作元素包含两个属性,一个是name,用来设定传递参数的名称;一个是value,用来设定传递参数的值.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
4.
1动作元素搭配动作元素01020304包含JSP文件并传递参数050607使用include动作元素包含一个包含JSP文件,并传递参数08091011121-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
4.
2动作元素搭配动作元素01020304跳转并传递参数050607使用forward动作元素跳转到另一个JSP文件,并传递参数08091011121-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
5、和、和三个动作元素,一般都是搭配起来使用.
其中动作元素用来在JSP中嵌入Java插件;动作元素用来给Bean或者Applet传递参数;动作元素用来指定当浏览器不支持或无法启动Bean或者Applet时,在页面上打印输出的错误提示信息.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
5.
1动作元素动作元素用来在JSP中嵌入Java插件,比如Applet.
动作元素会自动根据浏览器版本替换成标签或者标签.
其中用于HTML4.
0版本,而标签用于HTML3.
2版本.
1-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
5.
1动作元素属性属性作用type用来指定插件类型,可以是bean和appletname用来指定Applet或Bean名称code用来指令所执行的Java类名,必须以.
class结尾codebase用来指令所执行的Java类所在的目录align用来指定Applet或Bean显示时的对齐方式height用来指定Applet或Bean显示时的高度width用来指定Applet或Bean显示时的宽度hspace用来指定Applet或Bean显示时距离屏幕左右的距离,单位是像素vspace用来指定Applet或Bean显示时距离屏幕上下的距离,单位是像素archive用来指定Applet或Bean执行前预先加载的类的列表iepluginurl用来指定IE用户能够使用的JRE下载地址nspluginurl用来指定NetscapeNavigator用户能够使用的JRE下载地址1-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
5.
2动作元素动作元素用来给Bean或者Applet传递参数,一般搭配使用.
其语法格式如下.
1-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
5.
3动作元素动作元素用来指定当浏览器不支持或无法启动Bean或者Applet时,在页面上打印输出的错误提示信息.
其语法格式如下.
错误信息1-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
6综合练习1、在一个JSP文件中使用动作元素跳转到另一个JSP文件,同时传递参数name.
而在跳转到的页面同样使用动作元素跳转到另一个JSP文件,同时也传递同样的参数name.
在最后跳转到的页面中获得该参数,并输出参数的值.
1-21北京源智天下科技有限公司联系方式:http://www.
rzchina.
net4.
7小结本讲详细介绍了JSP的动作元素的作用,并对JSP动作元素进行分类.
介绍了如何使用动作元素来包含文件,还如何使用动作元素来实现页面跳转.
同样还介绍了如何使用动作元素来传递参数以及如何使用动作元素来执行Applet.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第5章JSP内置对象本章将介绍JSP的内置对象,并对JSP内置对象进行分类.
将详细介绍其中的JSP内置对象,包括request、response、out、session等等.
熟练使用JSP内置对象保存属性.
熟练JSP属性保存的四个范围.
熟练使用request对象取得参数值.
了解其他各对象的常用方法.
1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
1JSP内置对象分类根据各对象的作用不同,可以将这九个对象分为如下四类.
第一类:与Servlet有关的内置对象.
包括page和config两个对象.
第二类:与Input/Output有关的内置对象包括out、request和response三个对象.
第三类:与Context有关的内置对象包括session、application和pageContext三个对象.
第四类:与Error有关的内置对象.
仅包括exception这一个对象.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
2属性保存范围在JSP中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性,从而实现数据的共享.
同样JSP中提供了四种属性保存范围,分别为page、request、session以及application.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
3request对象request对象不但可以用来设置和取得request范围变量,还可以用来获得客户端请求参数、请求的来源、表头、cookies等等.
其中常用方法如下.
获得客户端请求参数获得所有的参数名称获得参数的所有参数值获得封装所有参数值的Map1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
4response对象response对象用来给客户端传送输出信息,设置标头等等.
其常用方法如下.
实现页面跳转实现页面自动刷新实现页面自动跳转1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
5out对象out对象用来向网页输出信息.
其常用方法如下.
使用out对象进行页面输出使用out对象求得缓冲区使用大小1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
6session对象session对象用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期超时或者被自动释放掉为止.
其常用方法如下.
设置并获得session生命周期获得session的其他信息1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
7application对象application对象用户取得和设置Servlet的相关信息.
application对象的生命周期是服务器启动产生直到服务器关闭为止.
其常用方法如下.
通过application对象获得服务器版本通过application对象获得其他信息1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
8pageContext对象pageContext对象不但可以用来设置page范围的属性,同样也可以用来设置其他范围属性,不过需要指定范围参数.
通过pageContext对象还可以获得其他内置对象.
示例:通过pageContext对象取得不同范围属性.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
9page对象page对象代表JSP转译后的Servlet,通过page对象可以非常方便的调用Servlet类中定义的方法.
示例:过page对象调用Servlet类中定义的方法.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
10config对象config对象可以用来获得Servlet的配置信息,config对象包含的方法以及方法说明如下所示.
方法返回值方法说明getInitParameter(name)String获得Servlet初始化参数getInitParameterNames()Enumeration获得Servlet所有初始化参数名称getServletContext()ServletContext获得当前ApplicationcontextgetServletName()String获得Servlet名称1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
11exception对象exception对象用来处理错误异常,如果要使用exception对象,必须指定page指定中的isErrorPage属性值为"true".
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
12综合练习下面来看一个简单的用户登录案例,该案例包含4个文件,一个是登录表单页LoginForm.
jsp,一个是登录判断页,一个是登录成功页,一个是登录失败页.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net5.
13小结本章详细介绍了JSP的内置对象,包括request、response、out、session等等.
介绍了如何通过内置对象将属性保存的指定范围.
还介绍了如何通过request、对象获得客户端请求参数,通过response对象实现页面跳转,使用out对象进行页面输出等等.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第6章数据库操作本章将详细介绍数据库操作,如连接数据库、添加记录、更新记录、删除记录以及查询记录等等.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握加载JDBC驱动程序熟练掌握连接MySQL数据库熟练掌握添加、更新、删除记录熟练掌握获得指定记录熟练掌握使用PreparedStatement进行数据库操作1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
1.
1下载MySQL首先登陆MySQL5.
0的官方下载网站http://dev.
mysql.
com/downloads/mysql/5.
0.
html.
该下载页面中提供了不同操作系统的程序版本,找到其中"Windowsdownloads"一栏下面的"WindowsEssentials"选项.
单击其右边的"Pickamirror"链接,进入到镜像下载页面.
在该下载页面中提供了MySQL用户注册功能,这时可以单击"Nothanks,justtakemetothedownloads!
"链接,选择合适的镜像站点进行下载.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
1.
2安装MySQLMySQL下载完成后,即可对其进行安装,其安装步骤如下.
(1)双击下载的安装文件mysql-essential-5.
0.
67-win32.
msi.
(2)系统将数据库服务器安装到默认路径"C:\ProgramFiles\MySQL\MySQLServer5.
0"下.
(3)安装结束后,在是否配置服务器界面中选择"ConfiguretheMySQLservernow"(4)在"MySQLServerInstanceConfiguration"配置中选择"StandardConfiguration"(5)在设置服务器选项界面中选择"InstallAsWindowsService"(安装为Windows服务)和"IncludeBinDirectoryinWindowsPATH"(添加Bin路径到PATH环境变量)两个复选框(6)在安全选项界面中需要设置系统管理员root的密码.
通过如上步骤即完成MySQL服务器的安装.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
2.
1下载并安装MySQL的JDBC驱动程序打开MySQL的JDBC驱动下载页面"http://dev.
mysql.
com/downloads/connector/j/5.
0.
html".
选择下载其中的"SourceandBinaries(zip)"选项.
安装MySQL的JDBC驱动程序非常简单,只需将mysql-connector-java-5.
0.
8-bin.
jar文件拷贝到Web项目的WEB-INF目录的lib目录下.
安装完成后,就可以在该项目中通过JDBC驱动程序连接MySQL数据库服务器了.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
2.
2加载JDBC驱动程序JDBC与数据库建立连接首先必须加载适当的驱动程序.
一般使用Class的forName()方法来加载驱动程序.
其中MySQL的驱动程序类为com.
mysql.
jdbc包下的Driver.
class.
所以可以使用Class.
forName("com.
mysql.
jdbc.
Driver");来加载MySQL的驱动程序.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
3JDBC连接MySQL数据库1.
创建数据库和数据表createtableuser(useridintprimarykeyauto_increment,usernamevarchar(50),passwordvarchar(50));2.
连接MySQL数据库连接数据库非常简单,只需使用DriverManager类的getConnection()方法来创建一个连接对象即可.
要想创建一个连接对象还需要指定连接URL.
其中连接URL的语法格式如下.
主要通讯协议:次要通讯协议://数据来源其中连接MySQL数据库的URL格式如下.
jdbc:mysql://localhost[:端口号(默认3306)]/数据库名称[参数1=参数值1&参数2=参数值2]1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
4语句对象Statement语句对象Statement可以用来执行SQL语句,从而实现数据库操作.
可以通过调用连接对象的createStatement()方法来创建并获得语句对象Statement.
语句对象Statement包含两个主要方法,分别为executeUpdate()方法和executeQuery()方法.
其中executeUpdate()方法主要用来执行数据的更新操作,如添加记录、更新记录和删除记录;executeQuery()方法主要用来执行数据查询操作,如查询记录.
示例:添加记录、更新记录、删除记录1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
5ResultSet结果集下面介绍通过语句对象Statement的executeQuery()方法用来执行数据查询操作.
其中executeQuery()方法接受一个查询SQL语句,返回一个ResultSet结果集对象.
ResultSet结果集对象包含了所以查询得到的记录.
可以通过ResultSet结果集对象的next()方法来获得一笔一笔的数据.
每次调用next()方法,光标都会向下移动,也就是光标指向下一条数据.
如果只要获得第一笔数据,则只需调用一次next()方法就可以了;如果要获得多条数据,则可以使用循环语句来逐条取出.
当光标指到了指定的位置,这时还需要取出每个字段的数据.
这时就必需根据字段的数据类型来调用ResultSet结果集对象相应的getXXX()方法.
比如字段类型为int类型,这时就可以调用getInt()方法.
在调用getXXX()方法时还需要指定查询字段的位置,如果为第一个字段,则指定参数为1,依此类推.
示例:获得所有记录、获得指定字段记录、获得指定起始位置和条数的记录1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
6数据库的关闭操作数据库在每次使用之后都必须进行关闭,这样可以释放大量资源.
关闭数据库操作的顺序与打开数据库操作的顺序想反.
首先关闭结果集,然后再关闭语句对象Statement,最后关闭数据库连接对象.
无论是关闭结果集ResultSet还是语句对象Statement以及数据库连接对象,都是调用其close()方法.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
7预处理语句对象PreparedStatementPreparedStatement接口继承了Statement接口,所有它能够实现Statement的所有,但是其相比Statement更加灵活.
PreparedStatement中的SQL语句可以接受一个或者多个参数,这些参数值都使用""来代替.
在执行SQL语句前,必须通过PreparedStatement对象的setXXX()方法为参数赋值.
通过预处理语句对象PreparedStatement同样可以进行添加记录、更新记录、删除记录和获得记录.
示例:添加记录、更新记录、删除记录、获得指定记录.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
8综合练习下面来看一个简单的用户注册案例,该案例包含两个文件.
一个是注册表单页,一个是注册提交页,通过JDBC连接数据库,并通过SQL语句添加用户记录.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net6.
9小结本章介绍了如何下载并安装MySQL数据库服务器,还介绍了如何安装JDBC驱动程序.
介绍了如何通过JDBC连接MySQL数据库,并通过语句对象Statement来进行数据库操作.
介绍了如何通过Result结果集来获得记录,以及如果通过预处理语句对象PreparedStatement来进行数据库操作.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第7章JSP和JavaBean本章将详细介绍什么是JavaBean,以及如何定义JavaBean.
还将介绍如何在JSP中调用JavaBean,如何设置并获得JavaBean属性以及设置JavaBean的范围,最后还将介绍如何移除JavaBean.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握定义JavaBean熟练掌握在JSP中调用JavaBean熟练掌握设置并获得JavaBean属性熟练掌握设置JavaBean的范围熟练掌握移除JavaBean1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
1.
1JavaBean简介JavaBean是为Java语言设计的软件组件模型,具有可重复使用和跨平台的特点.
可以通过JavaBean来封装业务逻辑,进行数据库操作等.
从而很好的实现业务逻辑和前后台程序的分离.
JavaBean其实就是一个简单的Java类,这也就意味着,Java类的一切特征,JavaBean也都具有.
JavaBean同样可以使用封装、继承、多态等特性.
JavaBean可以分为两类,一类是有用户接口(UI)的JavaBean,一类是没有用户接口的JavaBean.
一般在JSP中使用的都是没有用户接口的JavaBean,因此本章所介绍的JavaBean都是指没有用户接口的JavaBean.
这类JavaBean只是简单的进行业务封装,如数据运算和处理、数据库操作等.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
1.
1JavaBean简介一个标准的JavaBean应该具有如下几个特点.
1、JavaBean必须是一个公开的类,也就是说JavaBean的类访问权限必须是public的.
2、JavaBean必须具有一个无参数的构造方法.
如果在JavaBean中定义了自定义的有参构造方法,就必须添加一个无参数构造方法,否则将无法设置属性;如果没有定义自定义的有参构造方法,则可以利用编译器自动添加的无参构造方法.
3、JavaBean一般将属性设置成私有的,通过使用getXXX()方法和setXXX()方法来进行属性的取得和设置.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
1.
2定义JavaBean02//一个简单的JavaBean示例03publicclassUserBean{04//用户名属性05privateStringusername;06//用户密码属性07privateStringpassword;08//获得用户名09publicStringgetUsername(){10returnusername;11}12//设置用户名13publicvoidsetUsername(Stringusername){14this.
username=username;15}16//获得用户密码17publicStringgetPassword(){18returnpassword;19}20//设置用户密码21publicvoidsetPassword(Stringpassword){22this.
password=password;23}24}1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
1.
3在JSP中调用JavaBean在JSP中调用JavaBean,有如下两个优点.
1、提高代码的可复用性.
对于通常使用的业务逻辑代码,如数据运算和处理、数据库操作等,可以封装到JavaBean中.
在JSP文件中可以多次的调用JavaBean中的方法来实现快速的程序开发.
2、将HTML代码和Java代码进行分离,程序利于开发维护.
将业务逻辑进行封装,使得业务逻辑代码和显示代码想分离,不会互相干扰.
避免了代码有多有复杂的问题,方便了日后的维护.
要想要JSP中调用JavaBean,就需要使用到动作指令,其语法格式如下.
其中id属性表示该JavaBean实例化后的对象名称.
scope属性用来指定该JavaBean的范围,也就是指JavaBean实例化后的对象储存范围.
范围的取值有如下四种,分别是page、request、session和application.
class属性用来指定JavaBean的类名,这里所指的类名包括包名和类名.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
2设置JavaBean属性JSP中提供了一个动作指令来设置JavaBean属性,其有如下四种语法格式.
其中name属性使用设置实例化对象名,和中的id属性保持一致.
property属性用来指定JavaBean属性名称.
param属性用来指定接受参数名称,value属性用来指定属性值.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
2.
1根据所有参数设置JavaBean属性第一种动作指令用来根据所有参数设置JavaBean属性,其语法格式如下.
其中"*"表示根据表单传递的所有参数来设置JavaBean的属性.
比如通过表单传递了两个参数,如username和password,这时就可以自动的对JavaBean中的username属性以及password属性进行赋值.
这里必须注意的是,表单的参数必须和JavaBean中的属性名称保持大小写一致,否则无法进行赋值操作.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
2.
2根据指定参数设置JavaBean属性第二种动作指令用来根据指定参数设置JavaBean属性,其语法格式如下.
第二种动作指令相比第一种动作指令具有更好的弹性.
第一种动作指令要求设置所有的参数,而第二种动作指令可以用来设置指定的参数.
比如通过表单传递了两个参数,如username和password,这时就可以指定只为JavaBean的username属性赋值,也可以指定只为JavaBean的password属性赋值.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
2.
3根据指定参数设置指定JavaBean属性第三种动作指令用来根据指定参数设置指定JavaBean属性,其语法格式如下.
第三种动作指令相比前两种动作指令更加具有弹性.
前面两种动作指令都需要设置参数和JavaBean属性必须相同,而且必须保证大小写一致.
而第三种动作指令没有此限制,因为可以通过其指定需要设置的JavaBean属性.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
2.
4设置指定JavaBean属性为指定值第四种动作指令用来设置指定JavaBean属性为指定值,其语法格式如下.
第四种动作指令相比前三种动作指令更加具有弹性.
前面三种动作指令都需要接受表单参数,而第四种可以根据需要动态的设置JavaBean属性值.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
3获得JavaBean属性前面介绍的获得JavaBean属性都是通过调用实例化对象名从而获得的,下面来介绍一种更加简便的方法.
JSP提供了一个动作指令用来很方便的获得JavaBean属性,其语法格式如下.
其中name属性用来设置实例化对象名,同样必须和中的id属性保持一致.
property属性用来指定需要获得的JavaBean属性名称.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
4设置JavaBean的范围在前面几章曾经介绍过JSP属性有四种存储范围,分别为page、request、session以及application.
同样也可以设置JavaBean的存储范围,其取值和意义同属性保存范围完全相同.
下面将分别介绍如何设置各不同范围JavaBean,以及不同存储范围的区别.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
5移除JavaBeanJavaBean会根据其设置的范围来决定其生命周期,当生命周期结束,JavaBean将自动移除.
不过设计着也可以手动的移除该JavaBean,从而节省内存.
JavaBean的移除对于不同范围的JavaBean而不同,分别通过调用pageContext、request、session、application的removeAttribute(Stringname)方法来移除page范围、request范围、session范围以及application范围的JavaBean.
其中name属性设置为实例化对象名,必须和中的id属性保持一致.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net7.
6小结本章介绍了什么是JavaBean,以及如何定义JavaBean.
还详细介绍了如何在JSP中调用JavaBean,以及如何设置并获得JavaBean属性以及设置JavaBean的范围,最后还介绍了如何移除JavaBean.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第8章EL表达式EL全名为ExpressionLanguage,它原来是JSTL1.
0为了方便存取数据所定义的语言.
到了JSP2.
0以后,EL正式纳入成为标准规范之一.
只要是支持Servlet2.
4/JSP2.
0的Container,都可以在JSP网页中直接使用EL.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握使用EL运算符熟练掌握EL内置对象熟练掌握使用EL存取器1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1EL运算符EL提供了多种运算符操作,比如算术运算符、关系运算符、逻辑运算符、验证运算符等.
本节将对这些运算符进行详细的讲解.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1.
1算术运算符通过EL提供算术运算符,开发者可以非常方便的在JSP页面进行算术操作.
而且使用算术运算符和Java的算术运算符非常相视,开发者能很熟练的使用这些算术运算符来进行开发,从而简化了页面代码量.
常用的算术运算符有加、减、乘、除、求余,如下表所示.
算术运算符说明示例结果+加${1+1}2-减${1-1}0*乘${1*2}2/或div除${3/2}1.
5%或mod取余${3%2}11-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1.
2关系运算符关系运算符主要用来进行比较操作.
EL提供了关系运算符,使开发者能很方便的在JSP页面进行比较操作.
常用的关系运算符有等于、不等于、小于、大于、小于或等于、大于或等于,如下表所示.
关系运算符说明示例结果==或eq等于${1==1}或${1eq1}true!
=或ne不等于${1!
=1}或${1ne1}false或gt大于${1>2}或${1gt1}false=或ge大于或者等于${1>=2}或${1ge1}false1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1.
3逻辑运算符逻辑运算符主要用来进行逻辑操作,如:交集、并集、非.
EL提供了关系运算符,使开发者能很方便的在JSP页面进行逻辑操作.
需要注意的是运算符两边的表达式必须是布尔类型的.
逻辑运算符说明示例结果&&或and交集${A&&B}或${AandB}当A和B都为true时为true,其他情况为false||或or并集${A||B}或${AorB}当A和B都为false时为false,其他情况为true!
或not非${!
A}或${notA}当A为true时,为false当A为false时,为true1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1.
4条件运算符前面提到了大量的预算符,下面还将介绍一个可以节省大量代码的条件运算符.
条件运算符的格式如下.
${AB:C}如果A为true时,执行B代码;而如果A为false时,则执行C代码.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1.
5验证运算符EL提供了验证运算符empty,其对于验证数据特别有用.
empty运算符采用单个表达式作为其变量即${emptyinput},并返回一个布尔值,该布尔值表示对表达式求值的结果是不是"空"值.
求值结果为null的表达式被认为是空,如无元素的集合或数组.
如果参数是对长度为零的String求值所得的结果,则empty运算符也将返回true.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
1.
6括号运算符以及运算符的优先级括号运算符主要用来改变运算的优先级,例如${(3+2)*8},执行结果为40.
如果去掉括号,那么结果将为19.
从而可以看出在括号中内容将会先执行.
从高到低[],.
()-(负)、not、!
、empty*、/、div、%、mod+、-(减)lt、gt、le、geeq、ne&&、and||、or${AB:C}从高到低1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2EL内置对象EL表达式非常简单,在前面已经介绍过EL的运算符.
所有的EL表达式都是以"${"开始"}"为结尾的.
如:"${applicationScope.
user.
userName}".
如果按照以前的JSPScriptlets的写法代码如下.
Useruser=(User)application.
getAttribute("user");Stringusername=user.
getUserName();1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
1.
与[]运算符EL通过.
与[]运算符来存取数据.
比如:${applicationScope.
user.
userName}等价于${applicationScope.
user["userName"]}.
和[]也可以同时混合使用,如下:${sessionScope.
shoppingCart[0].
price}回传的结果为shoppingCart中第一项物品的价格.
接下来介绍两者的差异.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
1.
与[]运算符(1)如果存取的属性名称包含一些特殊的符号,如".
"或者是"-"等非字母或数字的符号时,就必须使用[],例如.
applicationScope.
user.
usert-Name这样写是错误的,必须使用[],代码如下.
applicationScope.
user["user-Name"](2)如果使用变量来传入,那么也就只能使用[].
例如.
${applicationScope.
user[data]}这样做的效果等于于上面代码.
${applicationScope.
user.
userName}1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
2与储存有关的内置对象前面几章介绍了JSP中有内置对象,同样在EL中也有自己的隐含对象.
首先介绍4个与存储范围有关的隐含对象,分别是applicationScope、sessionScope、requestScope、pageScope.
这些隐含对象使用时来和JSP中的pageContext,request,session,application一样.
但是这四个隐含对象只能用来取得某个范围的属性值.
即JSP中的getAttribute(Stringname),不能取得其他的信息.
比如在JSP中request对象除了能够存取属性外,还可以用来接受参数和表头信息等.
(1)applicationScope对象,用来取得application范围属性值.
(2)sessionScope对象,用来取得session范围属性值.
(3)requestScope对象,用来取得request范围属性值.
(4)pageScope对象,用来取得page范围属性值.
如果不指定范围,如使用${name}.
其意思是去取某一范围中名称为name的属性.
因为并没有指定哪一个属性范围的name,所以它的默认值会从page范围内找,如果找不到,再依次到request、session、application范围中找.
如果没有找到就返回null.
在网页中也就没有显示.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
3与输入有关的内置对象与输入有关的隐含对象有两个param和paramValues,用来取得用户的请求参数.
在使用EL之前可以使用如下代码取得用户的请求参数.
request.
getParameter(Stringname);request.
getParameterValues(name);在使用EL时则可以使用param和paramValues两者来取得用户请求参数.
其中使用param接收的参数只有一个值,而如果参数有几个值,就必须使用paramValues来接受参数.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
4cookie内置对象下面来介绍EL其他的隐含对象cookie、header、headerValues、iniParam、pageContext.
cookie以key-value(键值对)的形式存储在浏览器的缓存区内.
EL中没有提供设定cookie的操作(这些操作一般都是后端开发者去做的),只能通过cookie对象设置cookie中的值.
1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
5header内置对象header储存用户浏览器和服务器用来沟通的数据.
当用户浏览器请求服务器的页面时,会传送出一个记载信息的标头文件.
而服务器端可以通过header或者headerValues来取得这些值.
其中header用来取得同一标头名称只有一个值的信息,而headerValues用来取得同一标头名称拥有不同的值的信息.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
6initParam内置对象initParam可以取得在web站点中设置的环境参数(context)值.
0304username05James061-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
2.
7pageContext内置对象pageContext用来取得有关用户请求和页面的详细信息.
取得请求的参数字符串${pageContext.
request.
queryString}取得请求URL${pageContext.
request.
requestURL}取得web应用名称${pageContext.
request.
contextPath}取得HTTP请求方式(GETorPOST)pageContext.
request.
method}取得使用的协议${pageContext.
request.
protocol}取得用户IP地址${pageContext.
request.
remoteAddr}判断session是否为新${pageContext.
session.
new}取得sessionID${pageContext.
session.
id}1-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
3EL存取器使用EL存取器(也称作导航)可以访问JavaBean、Map、对象数组和List等中的数据.
EL对数据的访问比使用Scriptlets有着代码量少,易维护的特点.
使用存取器读取JavaBean中的数据使用存取器读取Map中的数据使用存取器读取数组中的数据存取器复杂应用1-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
4综合练习1、结合EL内置对象和EL算术表达式做一个简单的计算器程序.
1-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net8.
5小结本章详细介绍了什么是EL表达式,还介绍了EL的运算符.
介绍了EL的内置对象以及其作用和使用方法.
最后重点介绍了EL存取器,以及如何通过存取器读取JavaBean中数据,如何读取Map中数据等等.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第9章JSTL标签库JSTL标签库分为五类,分别是JSTL核心标签库、数据库标签库、I18N格式化标签库、XML标签库和JSTL函数标签库.
本章将详细介绍各类标签以及每个标签的使用方法和作用.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握通过JSTL核心数据库定义变量,输出变量,移除变量.
熟练掌握通过数据库标签库完成数据库操作.
熟练掌握通过XML标签库完成XML文件操作.
熟练掌握通过I18N标签库完成国际化操作.
熟练掌握通过JSTL函数标签库完成常用函数操作.
1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1JSTL核心标签在JSP页面中要使用到核心标签,必须使用指令,指定核心标签.
代码如下.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
1标签JSTL提供了能方便定义变量的标签,能够将变量储存在JSP范围中或者JavaBean属性中.
其语法格式分为如下五种.
(1)指定变量名以及变量值,不指定scope(范围).
(2)将value的值储存到范围为scope的变量中.
(3)将本体内容的数据储存至范围为scope的变量中.
本体内容(4)将value值储存到targer对象的属性中.
(5)将本体内容的数据储存到targer对象的属性中.
本体内容1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
2标签用来显示数据的内容,类似于但是功能要更加强大.
使用输出内容比使用Scriptlets代码要更加简单,方便页面维护.
其语法格式分为如下五种.
(1)通过在中的value属性指定需要显示的值.
(2)通过escapeXml属性设置是否将value中的内容按照原样输出.
因为默认会将、'、"、&转换成<、>、'、"和&.
如果不想转换,只需要设定escapeXml属性为"false".
(3)通过default属性来指定默认值.
如果value的值为null时,则显示default的值.
(4)通过本体内容来指定默认值.
如果value的值为null时,则显示default的值.
本体内容1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
3标签操作是用来移除指定范围的变量.
其语法格式如下.
var属性指定待删除变量的名称,scope属性是可选的,用来指定删除变量的范围,缺省为page.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
4标签标签用来执行流程控制,其功能和Java语言中的if完全相同.
标签有两种语法格式.
一种没有本体内容,一种有本体内容.
(1)没有本体内容的标签格式如下.
其中test属性是必须填写的,表示进行判断的表达式.
属性var定义变量,该变量存放判断后的结果.
scope表示var定义变量储存的范围.
(2)有本体内容的标签格式如下.
本体内容其中test属性是必须填写的,当test中表达式的结果为true时,则会执行本体内容;如果为false则不会执行.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
5、、标签标签只能判断一个表达式,而且无法指定如果表达式不成立执行语句.
JSTL同样提供了类似于if.
.
.
.
else.
.
.
.
的语句标签.
本身只能当和的标签.
其中可以有一个或多个标签,有零个或多个标签.
其语法格式如下.
.
.
.
.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
6标签标签两种语法格式.
一种用来遍历集合对象的成员,一种用来使语句循环执行指定次数.
(1)遍历集合对象的成员,语法格式如下.
本地内容其中"var"用来存放现在指到的成员.
"items"指被迭代的集合对象.
"varStatus"用来存放现在指到的相关成员的信息.
"begin"表示开始位置(默认为0).
"end"表示结束位置.
"step"表示步长(默认为1).
(2)指定语句执行次数,其语法格式如下.
本地内容1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
7标签用来根据指定分隔符分割字符串.
其语法格式如下.
本地内容其中"var"、"varStatus"、"begin"、"end"、"step"属性和标签中用法一样.
"items"属性表示被分割的字符串,"delims"属性指定分隔符.
不仅可以分割仅有一个分隔符的字符串.
也可以通过设定多个分割符来分割有多个分隔符的字符串,只需要设置多个分隔符就可以了.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
8标签可以把其他静态或动态的文件包含到本身的JSP网页中.
它和JSP动作指令的最大的差别在于:只能包含和自己在同一Webapplication下的文件;而除了能够包含和自己的同一Webapplication的文件外.
也可以包含不同Webapplication或者其他网站的文件.
的语法格式如下.
本体内容或者.
本体内容1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
9标签标签用来传递参数,其包含两个参数.
包含两个属性name和value.
的语法格式如下.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
10标签标签用来生成URL,其语法格式分为两种,一种是不带参数的,一种是带参数的.
语法格式如下.
不带参数的语法格式.
带参数的语法格式.
标签1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
1.
11标签使用可以从一个JSP页面跳转其他的页面上去.
而且可以通过标签传递参数.
其语法格式分为两种,一种是不带参数的,一种是带参数的.
语法格式如下.
不带参数的语法格式.
带参数的语法格式.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
2数据库标签库在JSP中要使用SQL标签库,必须先使用指定,代码如下.
1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
2.
1标签使用JSTL的标签来设定数据源.
标签的语法格式如下.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
2.
2标签JSTL提供了标签来进行增、删、改操作.
的语法格式有两种,一种是将SQL语句写在标签里.
格式如下.
另外一种是将SQL语句做为本体内容.
1-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
2.
3标签JSTL中使用用来查询数据库中数据,的语法格式有两种,一种是将SQL语句写在标签里.
格式如下.
1-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
2.
4和标签使用和标签能让SQL语句动态的设定变量.
可用于各种数据类型,但是如果与时间或者日期有关时,则必须使用来设定SQL语句中的Date类型.
有两种语法格式,一种没有本体内容.
语法格式如下.
另外一种有本体内容.
语法格式如下.
value1-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
2.
5标签标签提供存取数据库时的一种安全机制(事务处理安全机制).
其语法格式如下.
或者1-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3I18N格式化标签库在JSP页面中要使用到格式化标签,必须使用指令,指定格式化标签.
代码如下.
1-21北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
1标签会根据区域或是定制的方式将数字格式化成数字、货币或百分比.
语法分为两种,一种是没有本体内容,使用value属性来指定要格式化的数字;一种有本体内容,使用本体内容来指定要格式化的数字.
1-22北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
2标签用来将字符串类型的数字、货币或百分比转换成数字类型.
和标签的作用正好相反.
语法同样分为两种,一种是没有本体内容,使用value属性来指定要转换成数字的字符串;一种有本体内容,使用本体内容来指定转换成数字的字符串.
1-23北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
3标签会根据区域或是定制的方式将日期或时间格式化,用来将日期类型转化成字符串类型日期.
其语法格式如下.
1-24北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
4标签用来将字符串类型的时间或日期转换成日期时间类型.
和标签的作用正好相反.
语法同样分为两种,一种是没有本体内容,使用value属性来指定要转换成日期时间的字符串;一种有本体内容,使用本体内容来指定转换成日期时间的字符串.
1-25北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
5标签用来设定默认时区或者是将时区储存到属性范围中.
其语法格式如下.
1-26北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
6标签用来暂时的设定时区.
其语法格式如下.
本体内容1-27北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
7标签标签用来设定用户的区域语言.
这里所指的区域语言是指用户所在地区使用的语言种类以及国家和地区的综合.
比如中国内地所使用的语言为中文,语言代码为"zh",而地区代码为"cn",所以中国内地的语言区域为"zh_cn".
的语法格式如下.
1-28北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
8标签用来设定接受的字符串的编码格式,与request.
setCharacterEncoding()功能一样.
的语法格式如下.
1-29北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
9标签用来设定默认的数据来源,也可以将储存到一定范围中,供需要时使用.
的语法格式如下.
1-30北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
10标签用来从指定的资源文件中通过索引(key)取得值(value).
其语法分为两种,一种是没有本体内容,使用key属性来指定要索引;一种有本体内容,使用本体内容来指定索引.
语法格式如下.
1-31北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
11标签当从资源文件中取得信息时,可能需要动态设定参数,例如用户名等.
这是就需要通过来传递参数.
其语法分为两种,一种是没有本体内容,使用value属性来指定要参数值;一种有本体内容,使用本体内容来指定参数值.
语法格式如下.
没有本体内容.
有本体内容.
参数值1-32北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
3.
12标签同样用来设定数据来源,但是与不同的是,设定数据来源只对本体内容中的标签有效.
其语法格式如下.
本体内容{}1-33北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4XML标签库XML标签根据标签功能主要分为三类:(1)XML核心操作,用来解析XML文件、显示XML文件中的信息(2)XML流程控制操作,用来对XML中信息进行判断,循环操作.
(3)XML转换操作,使用XML搭配XSLT显示在JSP页面上.
1-34北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
1下载并安装进行XML操作必须的JAR文件在前面讲解过如果安装JSTL,但是要想通过JSTL对XML进行操作还必须下载并安装"xalan.
jar"和"serializer.
jar".
如果没有安装该JAR文件的话,在进行XML操作时会出现错误提示.
1-35北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
2标签标签用来解析指定的XML文件.
其语法格式分为两种,一种没有本体内容,使用doc属性指定XML文件地址.
一种有本体内容,在本体内容中给出要解析的XML文件.
1-36北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
3标签通过XPath语句将结果输出到JSP中.
与类似,但是是输出变量值.
其语法格式如下.
1-37北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
4标签通过XPath语句将结果储存在设定的属性范围的变量中.
其语法格式如下.
1-38北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
5标签同类似都是用来做判断操作,其语法格式分为两种,一种没有本体内容,将判断的结果储存在属性范围的变量中.
一种有本体内容,通过判断XPath语句,如何为"true"则执行本体内容中的代码,如果为"false"则不会执行.
没有本体内容.
有本体内容.
本体内容1-39北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
6标签标签同类似.
同样XML标签库提供标签和标签,三个标签通常结合在一起使用.
其中只有标签中有属性,其他两个标签都没有属性.
标签使用XPath语句来进行判断.
其语法格式如下.
本体内容1-40北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
4.
7标签标签同类似.
通过可以遍历Java集合对象,而通过可以遍历整个XML文件内容.
其语法格式如下.
[var="varName"][varStatus="varStatusName"][begin="begin"][end="end"][step="step"]>本体内容1-41北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
5综合练习1、下面来看如何通过循环来生成一个表格.
表格包括行和列,所以要使用嵌套循环.
里层循环用来循环输出一行中的单元格,用来控制表格的列数.
外层循环用来循环输出整个一行,用来控制行数.
1-42北京源智天下科技有限公司联系方式:http://www.
rzchina.
net9.
6小结本章详细介绍了JSTL标签库的分类.
介绍了如何通过JSTL核心标签库来定义变量,输出变量以及移除变量.
还介绍了如何使用JSTL核心标签库来进行流程控制、循环遍历等等操作.
介绍了如何通过数据库标签库来完成数据库操作以及高级的事务处理.
介绍了如何通过I18N标签库来完成国际化操作,以及通过XML标签库来完成XML文件操作.
最后还介绍了JSTL函数标签库来实现字符串大小写替换等等操作.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第10章Servlet开发基础Servlet开发是JavaWeb开发中一个重要的部分.
本章将详细介绍Servlet的生命周期,还将介绍HttpServlet的常用方法以及Servlet的常用接口等等内容.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握如何定义Servlet理解Servlet的生命周期熟练掌握HttpServlet的常用方法熟练掌握使用Servlet的常用的接口1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
1.
1Servlet简介Servlet是由Sun公司于1997年提出的,其采用Java代码直接编写,通过CGI的方式与WebServer进行沟通.
目前ServletAPI的最新版本为2.
5,它同样具有Java程序的跨平台特性.
Servlet包含如下四个优点.
(1)跨平台,可移植性.
(2)功能强大.
(3)性能好.
(4)安全性强.
Servlet虽然具有如此多的优点,但是其并没有大规模的被采用,最大的原因在于其编写起来非常困难.
因为编写Servlet必须要有完整的Java程序设计技巧,而其网页的显示部分和功能部分混合在一起,不易于维护与分工.
不过Servlet的发展为后面JSP的诞生和发展打下了牢固的基础,而且JSP也是通过转译成Servlet后才能执行的.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
1.
2第一个Servlet程序08publicclassServletDemo01extendsHttpServlet{09publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)10throwsServletException,IOException{11//获得输出流out12PrintWriterout=response.
getWriter();13//输出到网页上14out.
println("ThisismyfirstServletApplication!
");15}16}Servlet其实就是一个Java类,所以其创建方法和创建Java类完全相同.
所有的Servlet类都必须继承HttpServlet类.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
1.
3Servlet生命周期Servlet也是一个普通的Java类,所以其一样具有生命周期.
Servlet从生成到销毁必须进过如下几个步骤.
(1)生成Servlet,加载到ServletEngine中,并通过调用其init()方法来进行初始化.
(2)通过提供的响应方法来处理客户端的请求.
(3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
2HttpServlet常用方法HttpServlet接口包含非常多的方法,这些方法除了init()和destroy()方法用来处理Servlet初始化和销毁.
还包括一些常用方法,如doGet方法、doPost方法以及Service方法等等.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
2.
1doGet方法doGet方法用来处理客户端浏览器直接访问和表单get方式提交的表单.
070809用户名:10密码:1112131-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
2.
2doPost方法doPost方法用来处理表单post方式提交的表单,不能处理客户端浏览器直接访问.
0809用户名:10密码:1112131-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
2.
3service方法service方法用来处理客户端浏览器直接访问和表单get方式提交的表单以及表单post方式提交的表单.
0809用户名:10密码:1112131-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
3Servlet常用接口Servlet中包含大量的接口,这些接口的应用和JSP中内置对象的应用非常类似.
如Servlet中的HttpServletRequest接口和JSP内置对象的request对象.
Servlet中的HttpServletResponse接口和JSP内置对象的response对象.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
3.
1HttpServletRequest接口HttpServletRequest接口的使用和JSP内置对象的request对象非常类似.
request对象其实就是HttpServletRequest接口的一个实例,不过其实例化过程是自动的无须自定义的.
在Servlet中request对象也是由容器初始化的,如果要在程序中使用request对象,直接使用就是,无需手动初始化.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
3.
2HttpServletResponse接口HttpServletResponse接口的使用和JSP内置对象的response对象非常类似.
response对象其实就是HttpServletResponse接口的一个实例,不过其实例化过程是自动的无须自定义的.
在Servlet中response对象也是由容器初始化的,如果要在程序中使用response对象,直接使用就是,无需手动初始化.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
3.
3HttpSession接口HttpSession接口的使用和JSP内置对象的session对象非常类似.
session对象其实就是HttpSession接口的一个实例,不过其实例化过程是自动的无须自定义的.
在Servlet中session对象必须通过request对象的getSession()方法来获得.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
3.
4ServletContext接口ServletContext接口的使用和JSP内置对象的application对象非常类似.
application对象其实就是ServletContext接口的一个实例,不过其实例化过程是自动的无须自定义的.
在Servlet中application对象必须通过HttpServlet接口的getServletContext()方法获得.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
4综合练习1、下面来看如何定义一个Servlet来读取一个文本文件的内容,并且在页面上打印文件的内容.
1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net10.
5小结本章详细介绍了什么是Servlet,如何定义Servlet以及Servlet的生命周期.
本章还介绍了HttpServlet常用方法,包括doGet方法、doPost方法以及Service方法.
本章还介绍了Servlet的常用接口,包括HttpServletRequest接口、HttpServletResponse接口、HttpSession接口以及ServletContext接口.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第11章Filter开发本章将详细介绍Filter的定义和作用,还将介绍如何配置Filter.
将详细介绍Filter的生命周期,以及一些常用的Filter,如非法文字过滤器、字符编码过滤器以及登录验证过滤器.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握如何定义并配置Filter理解Filter的生命周期熟练掌握如何添加非法文字过滤器熟练掌握如何添加字符编码过滤器熟练掌握如何添加登录验证过滤器1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
1.
1Filter简介Filter的中文译名为过滤器.
从字面名称就可以看出来Filter是用来进行过滤的.
借助于过滤器可以实现如下功能.
(1)过滤非法文字和信息.
(2)设置统一字符编码.
(3)对用户进行登录验证.
(4)改变图片文件格式.
(5)对相应做压缩处理.
(6)对XML的输出使用XSLT来进行转换.
在Servlet2.
3之后,如果要添加Filter只需在web.
xml中配置相关设定即可.
可以非常方便的为Web项目添加新的Filter和修改现有的Filter,而不需要修改原有的Servlet、JSP以及其他静态页面文件.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
1.
2第一个Filter程序Filter同Servlet类似同样也是一个Java类,所以其添加方式和普通的Java类完全相同.
自定义的Filter类必须实现Filter接口,还必须实现Filter接口中定义的init()方法、doFilter()方法和destroy()方法.
其中init()方法和destroy()方法分别用来初始化和销毁时调用.
doFilter()方法用来实现过滤,所有的处理代码都放置在该方法中.
doFilter()方法接受三个参数,分别是request、response和chain.
其中request和response用来传递给下一个Filter(如果有多个Filter)或者JSP和Servlet.
chain则通过调用其doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
1.
3Filter生命周期Filter同Servlet类似也具有生命周期.
Filter从生成到销毁必须进过如下几个步骤.
(1)生成Filter,并通过调用其init()方法来进行初始化.
(2)过滤用户请求,调用其doFilter()方法.
(3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
2常用Filter本节将介绍一些常用的Filter,如非法文字过滤器、字符编码过滤器、登录验证器.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
2.
1非法文字过滤器实现非法文字过滤器非常简单,首先通过Filter类中doFilter()方法的request参数来获得客户端的输入.
然后通过对输出的文字进行判断并进行处理,如替换该非法文字或者提示输出非法文字要求重新输出等等.
最后通过chain的doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
2.
2字符编码过滤器可以通过Filter来定义一个字符编码过滤器,这时就不需要在每个JSP页面中添加设置参数字符编码格式代码了.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
2.
3登录验证过滤器可以通过Filter来定义一个登录验证过滤器,这时就不需要在每个JSP页面中添加判断用户合法性代码了.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
3综合练习1、下面来创建一个IP过滤Filter.
当一个用户发出访问请求的时候,首先通过过滤器进行判断,如果用户的IP地址被限制,就禁止访问,只有合法的IP才可以继续访问.
IP过滤Filter代码如下.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net11.
4小结本章详细介绍了如何定义一个Filter,以及如何在web.
xml配置文件中配置自定义的Filter.
详细介绍了Filter的生命周期,以及一些常用的Filter,如如非法文字过滤器、字符编码过滤器以及登录验证过滤器.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第12章Listener开发本章将详细介绍Listener的定义和作用,还将介绍如何配置Listener.
将介绍Listener的分类以及常用的Listener,如ServletContextListener和HttpSessionListener.
通过本章的学习,读者应该能够完成如下几个目标.
熟练掌握如何定义并配置Listener熟练掌握ServletContextListener接口的实现和作用熟练掌握ServletContextAttributeListener接口的实现和作用熟练掌握HttpSessionListener接口的实现和作用熟练掌握HttpSessionAttributeListener接口的实现和作用1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
1Listener简介Listener的中文译名为监听器,从字面上可以看出Listener主要用来监听之用.
通过Listener可以监听容器中某一执行动作,并根据其要求做出相应的响应.
到目前Servlet2.
4开始,一共包含八个Listener接口,可以将其分为三类,分别如下.
第一类:与ServletContext有关的Listener接口.
包括两个Listener接口,分别是ServletContextListener和ServletContextAttributeListener.
第二类:与HttpSession有关的Listener接口.
包括四个Listener接口,分别是HttpSessionListener、HttpSessionAttributeListener、HttpSessionBindingListener和HttpSessionActivationListener.
第三类:与ServletRequest有关的Listener接口.
包括两个Listener接口,分别是ServletRequestListener和ServletRequestAttributeListener.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
2ServletContextListenerServletContextListener包含两个Listener接口,分别是ServletContextListener和ServletContextAttributeListener.
其中ServletContextListener接口用来实现ServletContext的启动和销毁监听;ServletContextAttributeListener接口用来实现application范围属性变化的监听.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
2.
1ServletContextListener接口ServletContextListener接口用来实现ServletContext的启动和销毁监听.
该接口中包含两个方法,一个是contextInitialized()方法,用来监听ServletContext的启动和初始化;一个是contextDestroyed()方法,用来监听ServletContext的销毁.
在这两个方法中还包含一个参数sce,其类型为ServletContextEvent.
通过ServletContextEvent对象的getServletContext()方法可以获得ServletContext对象.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
2.
2ServletContextAttributeListener接口ServletContextAttributeListener接口用来实现application范围属性变化的监听.
该接口中包含三个方法,一个是attributeAdded()方法,用来监听application范围属性的添加;一个是attributeReplaced()方法,用来监听application范围属性的替换;一个是attributeRemoved()方法,用来监听application范围属性的移除.
在这两个方法中还包含一个参数scab,其类型为ServletContextAttributeEvent.
通过ServletContextAttributeEvent对象的getName()方法可以获得属性的名称;通过ServletContextAttributeEvent对象的getValue()方法可以获得属性的值.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
3HttpSessionListenerHttpSessionListener包含四个Listener接口,分别是HttpSessionListener、HttpSessionAttributeListener、HttpSessionBindingListener和HttpSessionActivationListener.
其中HttpSessionListener接口用来实现sesion的初始化和销毁监听;HttpSessionAttributeListener接口用来实现session范围属性变化的监听.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
3.
1HttpSessionListener接口HttpSessionListener接口用来实现session的初始化和销毁监听.
该接口中包含两个方法,一个是sessionCreated()方法,用来监听session的创建和初始化;一个是sessionDestroyed()方法,用来监听session的销毁.
在这两个方法中还包含一个参数se,其类型为HttpSessionEvent.
通过HttpSessionEvent对象的getSession()方法可以获得session对象.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
3.
2HttpSessionAttributeListener接口HttpSessionAttributeListener接口用来实现session范围属性变化的监听.
该接口中包含三个方法,一个是attributeAdded()方法,用来监听session范围属性的添加;一个是attributeReplaced()方法,用来监听session范围属性的替换;一个是attributeRemoved()方法,用来监听session范围属性的移除.
在这三个方法中还包含一个参数se,其类型为HttpSessionBindingEvent.
通过HttpSessionBindingEvent对象的getName()方法可以获得属性的名称;通过ServletContextAttributeEvent对象的getValue()方法可以获得属性的值.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
4综合练习1、通过Listener实现在线用户列表显示.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net12.
5小结本章详细介绍了Listener的定义和作用,还介绍了如何在web.
xml配置文件中配置Listener.
介绍Listener的分类以及常用的Listener,包括ServletContextListener和HttpSessionListener.
最后通过一个综合练习,介绍了使用Listener如何完成在线用户显示.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第13章DAO设计模式本章将详细介绍什么是DAO,以及使用DAO设计模式的优点.
还将介绍如何设计数据库连接类、VO类、DAO接口、DAO实现类以及DAO工厂类.
通过本章的学习,读者应该能够完成如下几个目标.
了解什么是DAO设计模式以及其优点熟练掌握如何定义数据库连接类熟练掌握如何定义VO类熟练掌握如何定义DAO接口、DAO类以及DAO工厂类熟练掌握如何使用DAO实现数据库操作1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
1DAO简介DAO设计模式是属于J2EE数据层的操作,使用DAO设计模式可以简化大量代码和增加程序移植性.
回忆之前使用JDBC操作数据库,都是直接在JSP页面中写JDBC代码.
这样导致JSP页面中包含大量的HTML代码和JSP代码,显示和功能代码混在一起,难以维护.
因为要在JSP中使用JDBC代码,所有还必须导入"java.
sql.
*"包.
这样的设计是非常不合理的,JSP只需要关注数据的显示,而不需要去关注数据是从哪里来的,获得怎么得来的.
使用DAO设计模式可以很好的解决如上的问题.
DAO包含几个重要部分,分别如下.
(1)DAO接口(2)DAO实现类(3)DAO工厂类(4)VO类(5)数据库连接类1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
2DAO各部分详解DAO包括五个重要的部分,分别是数据库连接类、VO类、DAO接口、DAO实现类以及DAO工厂类,下面将对各部分进行详细的介绍.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
2.
1数据库连接类数据库连接类的主要功能是连接数据库并获得连接对象,以及关闭数据库.
通过数据库连接类可以大大的简便开发,在需要进行数据库连接时,只需创建该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库,不必再进行重复操作.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
2.
2VO类VO类是一个包含属性和表中字段完全对应的类.
并在该类中提供setter和getter方法来设置并获得该类中的属性.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
2.
3DAO接口DAO接口中定义了所有的用户的操作,如添加记录、删除记录以及查询记录等.
不过因为是接口,所以仅仅是定义,需要子类来实现.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
2.
4DAO实现类DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法.
在DAO实现中通过连接数据库进行数据库操作.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
2.
5DAO工厂类在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作.
这时就必须知道具体的子类,对于后期的修改非常不便.
如后期需要创建一个操作Oracal的DAO实现类,这时就必须修改所有的使用DAO实现类的代码.
使用DAO工厂类可以很好的解决后期修改的问题,可以通过该DAO工厂类的一个静态方法来获得DAO实现类实例.
这时如果需要替换DAO实现类,只需修改该DAO工厂类中的方法代码,而不必修改所有的操作数据库代码.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
3使用DAO完成数据库操作添加记录更新记录删除记录按ID查询记录1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
4综合练习一、下面是一个使用DAO完成查询所有记录的示例.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net13.
5小结本章详细介绍了DAO设计模式的优点以及包含的部分内容.
介绍了如何设计数据库连接类、VO类、DAO接口、DAO实现类以及DAO工厂类.
还介绍了如何通过DAO设计模式添加记录、更新记录、删除记录、按ID查询记录以及查询所以记录.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第14章MVC设计模式本章将详细介绍什么是MVC设计模式.
还将介绍MVC设计模式中的几个重要部分,并介绍MVC在JavaWeb开发中的使用.
通过本章的学习,读者应该能够完成如下几个目标.
了解什么是MVC设计模式了解Model1和Model2的区别以及优缺点熟练掌握如何定义视图部分熟练掌握如何定义模型部分熟练掌握如何定义控制器部分1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
1MVC简介MVC设计模式最先是由TrygveReenskaug提出的,并最先成功的应用在SmallTalk-80环境中,使许多交互和界面系统的构成基础.
Microsoft的MFC基础类也遵循了MVC的思想.
MVC把交互系统的组成分解成模型、视图、控制器三种部件.
(1)模型部分,它是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体的界面表达和I/O操作.
(2)视图部分,它是表示模型数据及逻辑关系和状态的信息及特定形式展示给用户.
它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图.
(3)控制器部分,它是用来处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件.
通常一个视图具有一个控制器.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
1MVC简介模型、视图与控制器的分离,使得一个模型可以具有多个显示视图.
如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化.
因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新.
这实际上是一种模型的变化-传播机制.
MVC设计模式被广泛的用到了许多的程序设计中,本章主要来介绍JavaWeb开发中使用到的MVC设计模式.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
2Model1和Model2首先来看什么是Model1模式.
以前面编写的那个登录项目为例,那就是典型的使用Model1模式开发的,整个Web项目都是由JSP页面构成.
其中登录判断页LoginConf.
jsp既要接受客户端的请求,还必须对其用户信息判断进行跳转.
JSP页面既要负责显示还要负责控制,将控制逻辑和表现逻辑混在一起了.
使用Model1模式开发代码重用性非常低,对于功能相似的代码只能选择拷贝的方式,而不是直接调用.
这样使得整个JSP页面充斥着功能类似的代码.
使用Model1模式开发程序扩展性也非常差,如果以后想要给程序扩展功能那是非常困难的.
假如在一个JSP页面添加了某一功能,那么可能其他的很多页面都需要变动,甚至于整个Web应用都要修改.
这种牵一发而动全身的应用,会使得后期异常的困难和繁琐.
JSP页面中大量充斥着Java脚本,这使得后期的维护非常困难.
有时候一个地方出现错误就要到处去找.
还有代码重用性,经常就是在使用拷贝、粘贴,都成了一种习惯了.
不过使用Model1模式来开发比较简单和方便.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
2Model1和Model21-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
2Model1和Model2使用Model1模式来开发确实简单,所以如果是小型的Web站点,后期的更新和维护工作不是很大,就可以采用Model1模式来开发.
Model2是基于MVC架构的设计模式.
MVC包含三个基本部分,分别是Model(模型)、View(视图)、Controller(控制器).
JSP只用负责显示,而控制器则由Servlet充当,模型由JavaBean充当.
Model1的程序流程比较容易理解.
用户提交信息给JSP页面,JSP接受用户提交的值并通过JavaBean连接数据库并操作数据库,然后将结果返回给用户.
Model2中就是将JSP的功能简化了,在Model1中JSP负责的东西过多了.
Model2中使用Servlet来充当控制器,而JSP只是充当显示.
至于为什么会这样设计是因为在JSP里面进行接受参数和判断还有跳转等功能会用到大量的Java脚本代码.
过多的Java脚本代码使得页面维护起来非常困难,而Servlet本来就是一个Java文件,这样使用Servlet来接受参数和判断还有跳转等功能是非常合适的.
可以把Servlet看成是一个大管家,它负责所有的业务逻辑并通过JavaBean来操作数据库以及决定显示页面.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
2Model1和Model21-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
3使用MVC模式改进用户登录案例如果要使用MVC设计模式,那么控制器要使用Servlet.
具体的逻辑判断则交给业务逻辑组件来判断,而将业务逻辑组件判断的结果返回交给Servlet来判断并实现跳转.
用户登录页面用户登录成功和失败页面业务逻辑组件Servlet控制器1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
4综合练习1、下面是一个简单的用户注册案例,使用MVC设计模式实现.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net14.
5小结本章详细介绍了什么是MVC设计模式,介绍了MVC设计模式中的三个重要部分.
介绍了Model2架构相对与Model1架构的优缺点.
通过一个用户登录案例详细介绍了如何定义视图部分、模型部分以及控制器部分,以及其各部分之间的关系.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第15章Struts2基础本章将介绍什么是Struts2框架以及Struts2框架的一些特点,还将介绍如何下载并安装Struts2框架.
并介绍如何通过Struts2框架实现登录案例,还将介绍如何改进控制器,以及配置控制器.
介绍如何通过Struts2的标签库来简化表单,并通过继承ActionSupport来完成输入校验.
还将介绍如何通过资源文件来实现页面信息国际化和校验错误信息国际化.
通过本章的学习,读者应该能够完成如下几个目标.
了解如何下载并安装Struts2框架熟练掌握如何新建控制器熟练掌握如何配置控制器了解实现Action接口的优点熟练掌握通过Struts2标签库简化表单熟练掌握通过继承ActionSupport完成输入校验熟练掌握页面国际化以及校验错误信息国际化1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
1Struts2简介Struts2是Struts的下一代产品.
而最初提案StrutsTi所设想的发展方向,在Struts的现有代码的基础上是很难完成的.
在发起提案的时候,PatrickLightbody把多个不同的Web框架的领导者邀请到了一起,希望大家能够达成共识,协力完成一个通用框架.
虽然最终由于各种原因,PatrickLightbody的愿望未能实现,但是WebWork和Struts却发现了二者在技术与开发人员这两个层面上的共同之处,不久之后,两个项目就在WebWork的技术基础上进行了合并,一个全新的Struts2框架就这样诞生了.
Struts2的体系结构与Struts1的体系结构的差别是巨大.
Struts2是以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也是可以使得业务逻辑控制器能够与ServletAPI完全的脱离开所以Struts2可以理解为是WebWork的更新产品.
因为Struts2和Struts1有着太大的变化,但是相对于WebWork,Struts2只有很小的变化,所以如果是以前的WebWork开发人员能方便的过渡过来,但是相对于Struts1开发人员这种过度会比较困难,相当于再学习一个新的框架.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
2.
1下载Struts2框架Struts2框架同样也是由Apache开源组织开发并负责维护的,所以可以登录Struts的官方站点http://struts.
apache.
org.
在Struts官方站点中可以看到Struts的最新动态以及帮助文档及下载等链接,在导航栏中找到Documentation选项,在该选项下可以看到现在Struts2的最新版本是2.
0.
11.
1.
单击"Struts2.
0.
11.
1"链接进入Struts2.
0.
11.
1版本页面.
该页面为Struts2.
0.
11.
1版本页面,在该页面包含该版本的介绍以及帮助文档.
单击"DownloadNow"链接进入Struts2.
0.
11.
1下载页面.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
2.
2安装Struts2框架将struts-2.
0.
11.
1的lib文件夹下的common-logging-1.
0.
4.
jar、freemarker-2.
3.
8.
jar、struts2-core-2.
0.
11.
1.
jar、xwork-2.
0.
4.
jar和ognl-2.
6.
11.
jar类库拷贝到Web项目的WEB-INF/lib目录下.
这些库文件是构建Struts2应用的必须库文件,如果要使用Struts2的更多功能,还需要拷贝更多的JAR到Web项目的WEB-INF/lib目录下.
编辑Web项目中的web.
xml配置文件,在配置文件中增加Struts2核心Filter的配置.
struts2org.
apache.
struts2.
dispatcher.
FilterDispatcherstruts2/*1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
3基于Struts2框架实现登录案例下面将演示如何通过Struts2来实现登录案例.
其实使用Struts2框架实现登录案例非常简单,甚至比Struts1框架下实现登录案例还要简单.
按如下步骤即可通过Struts2框架来实现简单的登录案例.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
3.
1准备工作(1)新建Web项目,并通过上面介绍的步骤安装Struts2框架(包括配置web.
xml配置文件).
(2)在WEB-INF/classes文件夹下新建一个struts.
xml配置文件.
(3)新建用户登录页面login.
jsp、登录成功页面login_success.
jsp、登录失败页面login_failure.
jsp以及业务逻辑组件LoginCheck.
java.
(4)编译业务逻辑组件LoginCheck.
并将编译后的class文件(包括完整的包名)放入项目的WEB-INF文件夹下的classes文件夹中.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
3.
2新建控制类ActionStruts2下的控制器不同于Struts1下的控制器,不需要继承Action父类,也无需继承任何借口,是一个普通的POJO类.
Struts2的Action包含了多个属性用来封装用户请求的参数,这点和Struts1当中的ActionForm非常类似.
同时还包含一个execute方法.
execute方法用来调用业务逻辑组件进行判断,并通过返回字符串,通过该字符串,Struts2会跳转到指定的视图资源.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
3.
3配置Action在struts.
xml文件中配置Action,其中包括指定Action的实现类,以及Action处理结果与视图资源文件之间的映射.
06070809101112/login_success.
jsp13/login_failure.
jsp1415161-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
3.
4程序执行流程1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
4改进控制器前面的应用中,Action代码中都是直接返回的字符串.
下面介绍通过实现Action接口来改进Action类,并利用该接口的优势.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
4.
1实现Action接口前面的应用中,Action代码中都是直接返回的字符串.
不过有时候由于输入的错误,如把"success"输入成了"succeess",这样项目就无法找到对应的视图资源了.
要找出这类的错误也是非常麻烦的.
所以Struts2提供了一个Action接口,通过该接口就可以很好的避免这类问题了.
Action接口的源代码如下.
publicinterfaceAction{//定义了5个字符串常量publicstaticStringSUCCESS="success";publicstaticStringNONE="none";publicstaticStringERROR="error";publicstaticStringINPUT="input";publicstaticStringLOGIN="login";//定义抽象方法execute,用来处理请求publicStringexecute()throwsException;}1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
4.
2配置ActionAction接口中并没有提供'failure'字符串常量,不过可以选择ERROR常量来替代.
这时需要更改struts.
xml文件,Action处理结果和视图资源的映射关系.
改变login_failure.
jsp所对应的Action处理结果为"error",这样如果Action返回的结果为"error"字符串,那么页面将跳转到login_failure.
jsp.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
5完成输入校验在前面的登录案例中并没有使用输入校验,也就是说如果用户不输入用户名或密码,同样也可以提交.
这样的设计显然不合理,下面介绍如何为登录案例添加输入校验.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
5.
1使用Struts2标签库简化表单在介绍输入校验之前,首先简单介绍一下Struts2的标签库.
Struts2框架提供了一组能进行控制流程、输出数据等操作的标签库.
使用标签库,能大量的减少代码的编写,只需简单的输入一些参数就可以实现复杂的代码功能.
下面先来看一系列与表单相关的UI表单,各标签名以及功能如下.
form:表单标签,同HTML标签中的textfield:单行文本标签,同HTML标签中的textarea:文本域标签,同HTML标签中的submit:提交按钮,同HTML标签中的select:下拉列表框,同HTML标签中的reset:重置按钮,同HTML标签中的radio:单选框,同HTML标签中的password:密码框,同HTML标签中的checkbox:复选框,同HTML标签中的1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
5.
2继承ActionSupport完成输入校验ActionSupport类已经实现了Action接口和Validatable等接口.
可以通过继承ActionSupport类简化Action开发.
Validatable接口中仅仅只定义了一个validata()方法,通过重写该方法,可以非常方便的实现校验功能.
如在该方法中添加对用户输入的参数信息进行判断,如用户名为空,密码为空等.
如果要输出错误提示信息,则只需调用ActionSupport类中的addFieldErrors方法来添加相应的错误提示信息.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
6程序国际化一个程序或Web应用如果需要面对多国家或区域的用户,那么不可避免的要实现国家化.
国际化也是一个企业级应用必不可少的功能.
Struts2提供了非常好的国际化支持,只需几个简单的配置文件就能完成应用国际化.
1-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
6.
1输出中文的校验错误信息前面只是简单的进行了输入校验,关于更多的输入校验方面的知识会在后面章节进行详细讲解.
下面来让完善该登录案例,使得该应用能够提示中文的校验错误信息.
因为addFieldError方法中第二个参数用来指定错误信息,所以只需将那些错误信息修改成使用中文就可以使得该登录案例提示中文的校验错误信息.
1-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
6.
2国际化资源文件在登录页面中,不是直接输出信息,而是输出一个key值,该key值在不同语言环境下找到对应资源文件下的对应信息.
如果是中文用户浏览该登录页面,那么将从中文资源文件中取出对应key值得字符串信息,所以返回给用户的是一个中文页面.
如果是美国用户,那么将从英文资源中取得对应key值得字符串信息,返回给用户的是一个英文页面.
如果程序要支持更多的语言,是不是只用增加相应资源文件.
1-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
6.
3加载资源文件资源文件已经创建好了,但是程序并不知道这些资源文件,所以必须配置这些资源文件并加载它们.
Struts2提供了非常多加载国际化资源文件方式.
其中最常用的就是加载全局的资源文件.
可以通过两种方法来加载全局的资源文件.
第一种方法就是在struts.
xml文件中配置一个struts.
custom.
i18n.
resources常量.
在struts.
xml增加常量是通过在根元素下新建一个元素,其中name属性用来设定常量名,value属性用来指定属性值.
第二种方法就是在struts.
properties文件中配置一个struts.
custom.
i18n.
resources常量.
新建一个struts.
properties文件.
该文件也是一个资源文件,所以也是使用键值对的形式来配置.
在该文件中配置资源文件的basename为messageResource.
1-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
6.
4输出国际化信息如果需要在JSP页面输出国际化信息呢,则可以通过Sturts2提供的标签来输出国际化信息.
标签的格式如下.
其中messageKey对应国际化资源文件中的key.
如果是在表单标签中,如单行文本框,密码框等中要输出国际化信息可以通过指定key属性指定key值.
1-21北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
6.
5输出国际化的校验错误信息通过前面的配置,登录页面已经实现了国际化.
其实校验错误信息也是可以实现国际化的.
其用法完全一样,可以通过ActionSupport类提供的getText方法指定key,获得国际化的错误提示.
1-22北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
7综合练习1、下面来练习通过使用Struts2的表单标签库来创建用户注册页面,注册页面Register.
jsp代码如下.
1-23北京源智天下科技有限公司联系方式:http://www.
rzchina.
net15.
8小结本章介绍了Struts2框架的起源及其特点.
详细介绍了如何下载Struts2框架,并介绍了如何安装Struts2框架.
介绍了如何通过Struts2框架实现登录案例,最后还介绍了如何改进控制器,并配置改进后的控制器.
介绍了如何通过Struts2的标签库来简化表单,并通过继承ActionSupport来完成输入校验.
还介绍了如何通过资源文件来实现页面信息国际化和校验错误信息国际化.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第16章Struts2高级应用本章将介绍Struts2框架内建的类型转换器,如基本数据类型转换器、数组类型转换器以及集合转换器.
还将详细介绍服务器端校验并介绍使用校验框架来完成输入校验.
通过本章的学习,读者应该能够完成如下几个目标.
熟练使用Struts2内建的类型转换器理解服务器断校验的重要性熟练使用addFieldError来添加校验错误信息熟练使用Struts2校验框架完成输入校验1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
1Struts2内建的类型转换器Struts2为常用的数据类型提供了内建的类型转换器,所以根本不用自定义转换器.
对于内建的转换器,Struts在遇到这些类型时,会自动去调用相应的转换器进行类型转换.
下面来看Struts2提供了哪些内建的类型转换器,以及这些内建类型转换器的使用.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
1.
1内建转换器介绍Struts2为常用的数据类型提供了内建的类型转换器,大部分情况下可以不用自定义转换器.
对于内建的转换器,Struts在遇到这些类型时,会自动去调用相应的转换器.
下面列举了全部的内建转换器,具体如下.
基本数据类型以及其封装类.
日期类型集合(Collection)类型集合(Set)类型数组类型1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
1.
2基本数据类型转换器Struts2的内建转换器中包含一个基本数据类型转换器,通过它能自动的完成基本数据类型到字符串的转换.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
1.
3基本数据类型的封装类转换器Struts2不但提供了基本数据类型转换器,同时也提供了基本数据类型封装类的转换器.
其用法和基本数据类型基本一样,只需修改业务控制器中的属性为对应的封装类就可以了.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
1.
4数组类型转换器Struts2还提供了一个数组类型的转换器.
这个转换器非常有用,比如多个表单元素的name属性相同,那么提交的参数就不再是字符串而是一个字符串数组.
通过Struts2提供的数组类型的转换器就能很方便的将多个相同name属性的表单元素的值封装到Action中的一个数组中.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
1.
5集合类型转换器上面介绍的是通过字符串数组来接受参数值,同样也可以通过集合类型来接受参数值.
Struts2提供的集合类型转换器,会将参数值自动赋值到集合类型属性中.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2服务器端校验如果一个Web应用仅有客户端验证那是不够的.
攻击者这可以绕过客户端校验直接进行非法输入,这样可能会引起系统的异常,所以必须加上服务器端的验证.
下面来看如何添加服务器端校验.
1-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2.
1服务器端校验的重要性如果为注册页面添加了客户端校验,那么用户输入的信息不合法则无法提交.
这是这里要注意的话,使用JavaScript增加客户端校验仅仅使得非法的数据无法提交,但是一些侵入者完成可以采用其他的方式来进行提交.
下面来看如何绕过这些JavaScript校验代码首先可以直接把这个注册页面下载下来,然后通过删除那些JavaScript代码,再修改表单的提交地址.
这样的话,就算是输入不合法的信息,客户端校验也起不了作用了,因为连JavaScript代码都被删除掉了.
通过一种如此简单的方法就可以绕过这些JavaScript校验代码.
那些侵入者很可能使用更加高级的手段来绕过这些JavaScript代码,从而直接提交非法的数据.
要避免这种情况就必须添加服务器端校验,服务端校验是整个Web应用中最重要的一道防线.
用户使无法直接接触到服务器端代码的,这样的话就算是客户端校验被人绕过,仍然能够通过服务器端校验来阻止用户的非法输入.
服务器端校验对于系统的安全性、完整性、健壮性起到了至关重要的作用.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2.
1服务器端校验的重要性那是不是客户端校验根本就没有什么意义了呢其实不是,因为并不是每个用户都有这样恶意侵入的想法.
大部分的用户都是采用的正常的输入,使用客户端校验能够过滤掉用户的误操作.
如果没有客户端校验,那么就算用户只是一个错误的操作,服务器端就要对其输入的信息进行处理并返回错误提示,这样会大大增加服务器端的负载.
客户端校验就像是一把锁,能够防君子但是不能防小人.
同样客户端校验和服务器端校验是紧密结合的,两者缺一不可.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2.
2完成服务器端输入校验下面来完成服务器端输入校验.
其中包含两个文件,一个是用户注册页register.
jsp,一个是业务控制器RegisterAction.
1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2.
3使页面保留提交信息如果希望表单中能够保留提交的信息,可以在表单的每个元素中添加value属性,并通过EL表达式来获得相应参数值.
1-13北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2.
4使用addFieldError来添加错误信息在前面介绍了使用actionError来保存输入校验错误提示信息.
actionError其实就是一个ArrayList,将错误信息保存在actionError中,其实就是保存在一个ArrayList中.
前面曾讲过类型转换的错误信息是保存在fieldError中,同样输入校验的错误信息也可以通过addFieldError方法来保存到fieldError中.
fieldError和actionError不同的是,fieldError是采用Map结构来存储的,所以都是以键值对来保存信息.
那到底是使用fieldError来保存错误提示信息还是使用actionError好呢这个就依据项目具体要求而定了,如果只是希望在页面中单纯的显示错误提示信息,可以使用actionError来保存错误提示信息;如果希望在相应的文本框中显示错误提示信息,则需要使用fieldError来保存错误提示信息.
1-14北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
2.
5输入校验与类型转换关系在前面介绍了使用actionError来保存输入校验错误提示信息.
actionError其实就是一个ArrayList,将错误信息保存在actionError中,其实就是保存在一个ArrayList中.
前面曾讲过类型转换的错误信息是保存在fieldError中,同样输入校验的错误信息也可以通过addFieldError方法来保存到fieldError中.
fieldError和actionError不同的是,fieldError是采用Map结构来存储的,所以都是以键值对来保存信息.
那到底是使用fieldError来保存错误提示信息还是使用actionError好呢这个就依据项目具体要求而定了,如果只是希望在页面中单纯的显示错误提示信息,可以使用actionError来保存错误提示信息;如果希望在相应的文本框中显示错误提示信息,则需要使用fieldError来保存错误提示信息.
1-15北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
3使用校验框架完成输入校验前面介绍了Struts2中内置的校验器,下面将通过这些校验器来改写注册案例.
同时将结合国际化处理来实现国际化信息提示,并通过配置来添加客户端校验.
1-16北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
3.
1完成输入校验Struts2提供了许多的内置的校验器,通过这些校验器可以非常方便的添加校验规则.
不需要再使用手动添加校验代码的方式,而是使用编写校验规则文件的方式来进行输入校验.
下面来看有哪些输入校验规则.
(1)用户名、密码、确认密码必须输入.
(2)用户名只能是数字或者字母,长度为6到20之间.
(3)密码,确认密码必须是数字或者字母,长度为6到20之间.
(4)密码和确认密码必须相同.
(5)年龄必须为整数而且必须是有效的年龄值.
(6)出生日期必须为正确的日期格式如1988-01-03,而且只能是1900-1-1年到是2010-1-1年之间.
(7)邮箱地址必须为合法的邮箱地址.
1-17北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
3.
2增加客户端校验Struts2还提供了一个非常好的功能,就是能通过校验规则文件自动添加客户端输入校验.
先来看下如何来添加客户端校验.
非常简单,只用标签中添加validate="true"属性即可.
1-18北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
3.
3国际化提示信息前面介绍的输出校验错误信息,是通过直接在校验规则文件中添加错误提示信息实现的.
其实可以通过国际化资源文件来定义错误信息,而通过校验规则文件中标签中的key来指定所使用的校验错误信息.
1-19北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
3.
4客户端校验与国际化问题前面之所以开始要去掉客户端校验功能.
是因为同时使用客户端校验功能和国际化功能会出现异常.
可以通过另一种方式来读取国际化信息.
在校验规则文件中使用${getTest("key")}来读取国际化文件中的信息.
1-20北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
3.
5校验短路短路,也就是说一个校验器校验失败了另一个校验器不会再进行校验.
要想实现短路这种效果,只需在field-validtor元素(字段校验器配置风格)或者是valitor元素(非字段校验器风格)中增加一个short-circuit属性,并设置其属性值为true进行了.
1-21北京源智天下科技有限公司联系方式:http://www.
rzchina.
net16.
4小结本章详细介绍Struts2框架内建的类型转换器,包括基本数据类型转换器、数组类型转换器以及集合转换器.
还详细介绍了服务器端校验并介绍使用校验框架来完成输入校验,以及校验信息的国际化处理.
1-1北京源智天下科技有限公司联系方式:http://www.
rzchina.
net第17章持久化框架Hibernate本章将介绍什么是对象-关系映射以及目前广泛使用的持久化框架Hibernate.
还将介绍如何下载和安装Hibernate框架.
还将详细介绍如何创建并配置Hibernate配置文件以及如何创建持久化类以及创建对象关系映射文件.
最后通过实例介绍如何插入数据、更新数据、删除数据以及查询数据.
通过本章的学习,读者应该能够完成如下几个目标.
了解什么是ORM映射以及其特点熟练掌握配置Hibernate配置文件熟练掌握创建持久化类熟练掌握创建关系映射文件熟练掌握通过Hibernate框剪进行数据库操作1-2北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
1初涉Hibernate本节将介绍什么是ORM,以及Hibernate持久化框架的特点以及其优势.
还将介绍如何下载并安装Hibernate框架以及Hibernate架构概述.
1-3北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
1.
1ORM简介ORM的全称是Object/RelationMapping即对象/关系映射.
对象是指使用的编程语言是面向对象的,而关系则是指使用的数据库是关系型数据库.
对象/关系映射则是指完成面向对象语言到关系型数据库的映射,通过映射后,可以像操作对象一样来操作数据库.
那是不是可以不用写SQL语句了呢是的.
通过创建一个持久化类来映射一个数据库表.
其中持久化类的属性则映射到数据库表中的字段.
当我们使用面向对象的方式来操作持久化对象时,ORM框架能自动将这些操作转换成SQL语句,从而完成对数据库的操作.
1-4北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
1.
2Hibernate框架的优势目前有几个比较流行的持久化框架,如:Hibernate、iBATIS以及最新的EJB3版本.
其中iBATIS框架并没有实现真正的O/RMapping框架,严格来讲它只是对象和SQL之间的映射,适合于对已有项目的改造.
而EJB3框架是重量级开发框架,不适合轻量级开发.
Hibernate框架是一个完整的持久层解决方案,通过Hibernate的支持,可以通过面向对象的方式进行各种数据库操作,从而取代传统的JDBC数据库操作.
Hibernate相对于其他的ORM框架还具有如下优势.
Hibernate是免费的、开放源代码的.
Hibernate是轻量级开发,实现O/R映射非常简单.
Hibernate可扩展性强.
Hibernate拥有众多社区支持.
1-5北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
1.
3下载和安装Hibernate首先登录Hibernate框架官方站点http://www.
hibernate.
org.
在下载列表中选择下载Hibernate3.
2版本.
安装hibernate非常简单,如果开发Java程序则只需将hibernate根目录下的hibernate3.
jar添加到ClassPath下.
如果开发Web应用则只需将hibernate3.
jar拷贝到Web应用的WEB-INF目录下的lib目录下.
如果应用需要使用到其他第三方的JAR,则还需将其添加到ClassPath下拷贝到Web应用的WEB-INF目录下的lib目录下.
1-6北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
2Hibernate的配置和相关类在使用Hibernate过程中,会发现Hibernate提供很多类,但常用的不会很多.
其中最核心的就是关于整体数据库的配置文件和与之相关的类,在此对这些进行说明.
Hibernate被设计为可以在不同的环境下工作,所以有很多配置参数,不过很多参数已经有默认值了,所以配置较少的参数就可以运行了.
1-7北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
2.
1Configuration类Configuration类负责管理Hibernate的配置信息,一个Configuration类的实例代表了应用程序中Java类到数据库的映射的集合.
应用程序通常只是创建一个Configuration实例,并通过它创建SessionFactory实例.
例如下面的代码:SessionFactorysessionFactory=newConfiguration().
configure().
buildSessionFactory();Configuration是Hibernate的入口,在新建一个Configuration的实例时,Hibernate会在类路径中查找文件hibernate.
properties和hibernate.
cfg.
xml文件,如果这两个文件同时存在,则hibernate.
cfg.
xml将会覆盖hibernate.
properties文件;如果两个文件都不存在,将抛出异常.
1-8北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
2.
2Hibernate配置文件0405060708jdbc:mysql://localhost/javaweb09101112com.
mysql.
jdbc.
Driver131415root1617admin181920org.
hibernate.
dialect.
MySQLDialect21222324251-9北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
2.
3SessionFactory类SessionFactory负责Session实例的创建.
为了创建一个SessionFactory对象,必须在Hibernate初始化时创建一个Configuration类的实例,并将已写好的映射文件交由它处理.
这样,Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象传教成功后,Configuration对象就没有用了,可以简单地抛弃它.
例如下面的实例代码:Configurationconfig=newConfiguration().
configure();SessionFactorysessionFactory=config.
buildSessionFactory();SessionFactory是线程安全的,可以被多个线程调用以取得Session对象,而构造SessionFactory很消耗资源,所以多少情况下一个应用中只初始化一个SessionFactory,为不用的线程提供Session.
1-10北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
3Hibernate中的对象Hibernate中对象有三种状态,临时对象(TransientObjects)、持久化对象(PersistentObjects)和脱管对象(DetachedObjects).
理解这集中对象,对Hibernate中关于持久化处理是很有帮助的,这一节将对这几种对象做说明.
1-11北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
3.
1对象在Hibernate的状态1-12北京源智天下科技有限公司联系方式:http://www.
rzchina.
net17.
3.
1对象在Hibernate的状态(1)临时状态由Java中的new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象.
如果没有变量对它引用,它将被JVM收回.
临时对象在内存是孤立存在的,它的意义仅仅是携带信息的载体,不和数据库中的数据有任何关联.
通过Session的save()和saveOrUpdate()方法可以把一个瞬时对象和数据库相关联,并把临时对象携带的信息通过配置文件所做的映射插入到数据库中,这个临时对象就成为持久化对象,并拥有和数据库继续相同的id字段.
搬瓦工最新优惠码优惠码:BWH3HYATVBJW,节约6.58%,全场通用!搬瓦工关闭香港 PCCW 机房通知下面提炼一下邮件的关键信息,原文在最后面。香港 CN2 GIA 机房自从 2020 年上线以来,网络性能大幅提升,所有新订单都默认部署在香港 CN2 GIA 机房;目前可以免费迁移到香港 CN2 GIA 机房,在 KiwiVM 控制面板选择 HKHK_8 机房进行迁移即可,迁移会改变 IP...
很久没有分享PhotonVPS的消息,最近看到商家VPS主机套餐有一些更新所以分享下。这是一家成立于2008年的国外VPS服务商,Psychz机房旗下的站点,主要提供VPS和独立服务器等,数据中心包括美国洛杉矶、达拉斯、芝加哥、阿什本等。目前,商家针对Cloud VPS提供8折优惠码,优惠后最低2G内存套餐每月4美元起。下面列出几款主机配置信息。CPU:1core内存:2GB硬盘:30GB NVm...
这不端午节和大家一样回家休息几天,也没有照顾网站的更新。今天又出去忙一天没有时间更新,这里简单搜集看看是不是有一些商家促销活动,因为我看到电商平台各种推送活动今天又开始一波,所以说现在的各种促销让人真的很累。比如在前面我们也有看到PacificRack 商家发布过年中活动,这不在端午节(昨天)又发布一款闪购活动,有些朋友姑且较多是端午节活动,刚才有看到活动还在的,如果有需要的朋友可以看看。第一、端...