《为开发做好准备》PPT课件.ppt

上传人:w****2 文档编号:15573344 上传时间:2020-08-21 格式:PPT 页数:147 大小:2.98MB
收藏 版权申诉 举报 下载
《为开发做好准备》PPT课件.ppt_第1页
第1页 / 共147页
《为开发做好准备》PPT课件.ppt_第2页
第2页 / 共147页
《为开发做好准备》PPT课件.ppt_第3页
第3页 / 共147页
资源描述:

《《为开发做好准备》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《为开发做好准备》PPT课件.ppt(147页珍藏版)》请在装配图网上搜索。

1、第2章 为开发做好准备,2.1 MyEclipse开发环境的搭建,2.2 开发第一个Java Project,2.3 开发第一个Web Project,2.4 开发第一个Struts2程序,2.5 开发第一个Hibernate程序,2.6 开发第一个Spring程序,2.7 开发Struts 2、Spring集成程序,2.8 开发Hibernate、 Spring集成程序,2.9 开发Struts 2、Hibernate、Spring集成程序,2.1 MyEclipse开发环境的搭建,1. 配置JRE JRE是Java的运行环境,JDK是Java的开发环境。因此,编写Java程序的时候需要JD

2、K,而运行Java程序的时候需要JRE。在JDK里面已经包含了JRE,因此也可以正常运行Java程序。 在MyEclipse中内嵌了Java编译器。在这里指定自己安装的JDK。 打开MyEclipse。选择菜单WindowPreferences,出现如图2-1所示对话框。,图2-1 MyEclipse配置,2.1 MyEclipse开发环境的搭建,2配置MyEclipse与Tomcat集成 启动MyEclipse,选择菜单WindowsPreferences命令,显示MyEclipse配置对话框,单击左边目录树中的“MyEclipseApplication ServersTomcatTomca

3、t 6.x”选项,在右面激活Tomcat 6.x,设置Tomcat的路径,如图2-2所示。,图2-2 MyEclipse中的服务器配置,2.1 MyEclipse开发环境的搭建,图2-3 配置Tomcat,2.1 MyEclipse开发环境的搭建,在MyEclipse的工具栏点击“startstop/restart MyEclipse Server”按钮,选择Tomcat 6.xStart,如图2-4所示。,从MyEclipse工具栏启动Tomcat,图2-4 启动Tomcat,2.1 MyEclipse开发环境的搭建,在控制台会出现启动Tomcat的信息。打开浏览器,输入http:/loca

4、lhost:8080/,如果配置成功,则出现Tomcat首页,如图2-5所示。,图2-5 Tomcat首页,2.2 开发第一个Java Project,2.2.1 开发步骤 这里,将开发第一个Java Project。运行结果为在控制台打印“Hello World”,如图2-6所示:,图2-6 程序运行结果,2.2.1 开发步骤,项目完成后的目录树如图2-7所示。,图2-7 项目目录树,开发的主要步骤如下: 步骤1: 创建Java Project 步骤2: 创建包 步骤3: 创建类 步骤4: 运行 具体过程如下: 步骤1 创建Java Project 选择菜单“FileNewJava Proj

5、ect”,创建一个Java Project,出现如图2-8所示对话框,为新建的Java Project输入名称:MyProject,其它选项保持默认,选择“Finish”。,2.2.1 开发步骤,输入项目名称,图2-8 创建一个Java Project,2.2.1 开发步骤,此时,MyEclipse生成了一个名为MyEclipse的工程,如图2-9所示。,图2-9 MyProject工程,JRE System Library存放的是环境运行需要的类库。 src是一个源代码文件夹(source folder),它与一般的文件夹(folder)不同之处在于src用来存放Java源代码。只要把Jav

6、a源代码放入src中,MyEclipse会自动编译src中的源代码。而folder一般都放一些不需要编译的东西,比如Jar包或者其它文件。自己写的代码都需要放入src文件夹。,2.2.1 开发步骤,步骤2 创建包 右击src文件夹,选择NewPackage,如图2-10,输入包名com.apex.demo,选择“Finish”。将看到如图2-7所示的一个包。,输入包名称,选择源代码文件夹,图2-10 输入包名,2.2.1 开发步骤, 步骤3 创建类 选中src,右击src,出现菜单,选择NewClass,出现如图2-11所示对话框。,类所在包,输入类名,图2-11 New Java Class

7、,2.2.1 开发步骤,选择“Finish”,文件保存时,会自动编译。 MyClass.java代码如下: package com.apex.demo; public class MyClass public static void main(String args) System.out.println(Hello World); 步骤4 运行 在Package Explorer中选中MyClass.java,右键Run AsJava Application, 运行结果如图2-12所示。,图2-12 运行结果,2.2.2 知识点:包、目录和JAR文件,包(package)是Java中一个独特

8、而非常重要的概念。它是一种Java文件的组织方式,一组特定的文件组织在一个包中完成一个或者一组特定的功能。包也不仅仅是一种文件组织方式,同时也和Java的语言的规范关联起来。比如,protected限定的方法在同一个包内是可见的,但是别的包就无法访问到。 每一个Java程序都要声明自己属于哪个包,在程序文件的开头加上package包名。包可以组织成一个体系,形成一个树状结构的体系,只要以“.”分割每个名字即可。例如:java.lang、java.util。包名可以任意制定,但通常以小写字母表示,并以com(公司)、org(组织)等开头,例如,com.sun.*。 既然Java定义了包的概念,那

9、么Java的源程序文件和编译产生的class文件都必须按照包的概念来组织目录结构。即,当在程序中声明了所属的包的时候,程序文本本身必须存放在包对应的目录中。例如,2.2.1提到的MyClass.java属于包com.apex.demo,所以MyClass.java文件必须存放在目录comapexdemo下,相应的编译生成的MyClass.class文件也在目录comapexdemo下。 开发一个Java应用程序将编写大量的源文件,这些文件虽然按照“包”的要求有序地组织在一起,但是一旦文件很多,在部署应用的时候依然显得很杂乱。因此,一种将一个或者一组包的class文件包装到一个文件中去的方法就产

10、生了,就是JAR。JAR其实是将一组文件压缩打包成一个文件,文件的后缀为jar。,2.3 开发第一个Web Project,这里,将开发一个Web项目,当用户在浏览器中输入http:/localhost:8080/myWebProject/index.jsp时,服务器会返回给用户一句话:“Hello World”,如图2-13所示。,图2-13 Web项目的运行效果,2.3 开发第一个Web Project,工程最后的目录树如图2-14所示,图2-14 工程目录树,主要的步骤如下: 步骤1:创建Web Project 步骤2:创建JSP 步骤3:部署 步骤4:运行浏览 步骤1 创建Web Pr

11、oject 启动MyEclipse,选择菜单FileNewWeb Project,为Web Project起名为myWebProject,其它的可以选择默认,出现如图2-15所示对话框。,2.3 开发第一个Web Project,输入项目名称,图2-15 创建Web Project,2.3 开发第一个Web Project,最简单Web项目只需要一个子目录WEB-INF。WEB-INF是一个很重要的目录,把Web项目的配置文件web.xml放在这个目录下。通常在其下创建lib和classes,在lib中放置应用依赖的Java库文件或者自己编写的JAR包。在classes中通常放自己所编写的编译

12、后的java class文件。 web.xml是一个Web项目的配置文件。 步骤2 创建JSP 在MyEclipse菜单栏中,选择FileNew File。输入新文件名“index.jsp”。由于MyEclipse会自动创建一个缺省的index.jsp文件,所以不需要再创建。双击打开这个文件,将其修改成以下内容。 index.jsp代码如下: Hello World ,2.3 开发第一个Web Project, 步骤3:部署 如图2-16所示,选择工具栏中的按钮“Deploy MyEclipse J2EE Project to Server”,将新建的Web项目部署到Tomcat中。,部署We

13、b Project,图2-16 部署按钮,2.3 开发第一个Web Project,选择项目为myWebProject,选择Add按钮,选择Tomcat 6.X作为我们的服务器。如图2-17所示,按OK。,选择要部署的项目,选择要部署到的服务器,图2-17 部署Web Project,2.3 开发第一个Web Project, 步骤4: 运行浏览 启动Tomcat 6.x。在浏览器中输入http:/localhost:8080/myWebProject/index.jsp,将看到如图2-18所示画面。,图2-18 myWebProject运行结果,2.4 开发第一个Struts2程序,2.4.

14、1 概述 Apache Struts 2是一个为企业级应用打造的优秀的、可扩展的WEB框架。该框架旨在充分精简应用程序的开发周期,从而减少创建、发布直到应用所花费的时间。 在对Struts 2做详细介绍之前,这里先来感受一下,将开发一个Web Project。用户输入姓名和密码,如图2-19所示。如果输入和密码是“scott”和“tiger”,则进入欢迎页面;反之,进入失败页面。,图2-19 用户登录界面,2.4.1 概述,项目最后的目录树如图2-20所示。,图2-20 项目目录树,2.4.1 概述,开发的步骤如下: 步骤1:下载Struts2框架 步骤2:创建Web Project 步骤3:

15、加载Struts2包 步骤4:修改web.xml 步骤5:创建login.jsp 步骤6:实现控制器 步骤7:配置struts.xml 步骤8::创建登录成功失败页面 步骤9:部署,2.4.2 详细开发步骤,步骤1 下载Struts 2框架 MyEclipse 6没有对Struts 2的支持,所以需要自己下载Struts 2开发包。登录http:/struts.apache.org/。下载Struts 2的完整版,本书使用的是struts-2.0.11。将下载的Zip文件解压缩,它是一个典型的Web结构,该文件夹包含如下文件结构如图2-21所示。,图2-21 Strust 2.0.11 文件结

16、构,2.4.2 详细开发步骤,apps:包含基于Struts 2的示例应用,对学习者来说是非常有用的资料。 docs:包含Struts 2的相关文档,如Struts 2的快速入门、Struts 2的文档、以及API文档等内容。 j4:包含了让Struts 2支持JDK 1.4的JAR文件。 lib:包含Struts 2框架的核心类库,以及Struts 2的第三方插件类库。 src:包含Struts 2框架的全部源代码。 步骤2: 打开MyEclipse,创建Web Project,命名项目的名称为struts2。 步骤3: 加载Strut 2包 将下载的Struts 2包解压后得到的lib文件

17、夹下的Struts2-core-2.0.11.jar, xwork-2.0.1.jar和ognl-2.6.11.ar,common-logging-1.0.4.jar,freemarker-2.3.8.jar五个必须的jar包复制到WEB-INF/lib路径下。大部分时候,使用Struts 2的Web应用并不需要利用到Struts 2的全部特性。 在目录树中,选中刚刚创建的struts2工程,右击,选择Build PathConfigure Build Path,出现如图2-22所示的对话框。选择Add External JARs将下载的五个jar包添加到项目中。,2.4.2 详细开发步骤,添

18、加项目外JAR包,选择Java Build Path,图2-22 添加Jar包,2.4.2 详细开发步骤,主要类描述如下: common-logging.jar:用于能够插入任何其它的日志系统。 ognl.jar:OGNL:表达式语言。 struts2-core.jar:Struts 2框架类库。 xwork.jar:Xwork项目,Struts 2就是在此基础上构建的。 freemarker.jar:所有的UI标记模板。 步骤4: 修改web.xml 打开WebRoot/WEB-INF/web.xml,修改成如下代码:,2.4.2 详细开发步骤, struts2 org.apache.str

19、uts2.dispatcher.FilterDispatcher struts2 /* ,2.4.2 详细开发步骤,步骤5 创建login.jsp 从用户请求开始,在WebRoot下创建一个简单的表单提交页面login.jsp,方法是:右击webRoot选择newjsp,在File Name中输入文件名“login.jsp”。 login.jsp代码如下: 登录页面 用户登录 姓名: 密码: 当表单提交给login.action时,Struts 2的FilterDispacher将自动起作用,将用户请求转发到对应的Struts 2 Action。,2.4.2 详细开发步骤,步骤6 实现控制器

20、在src目录下创建一个新类LoginAction.java,代码如下:,上面的Action类是一个普通的Java类。该类定义了两个属性:username和password。类变量的命名必须与在login.jsp中使用的文本输入框的命名严格匹配。在Struts 2中,类变量总是在调用execute()方法之前被设置(通过setUsername(),setPassword()方法),这意味着在execute()方法中可以使用这些类变量,因为在execute方法执行之前,它们已经被赋予了正确的值。 步骤7 配置struts.xml 在src下生成文件struts.xml(注意文件位置和大小写),里面

21、代码如下: /error.jsp /welcome.jsp ,2.4.2 详细开发步骤,映射文件定义了name为login的Action。即当Action负责处理login.actionURI的客户端请求,该Action将调用自身的execute方法处理用户请求,如果execute方法返回success字符串,请求被转发到/welcome.jsp页面,如果execute方法返回error字符,则请求被转发到/error.jsp页面。 步骤8: 创建登录成功失败页面 经过上面的步骤,这个Struts 2应用几乎可以运行了,但还需要为该Web应用增加两个JSP文件,两个JSP文件分别是error.

22、jsp页面和welcome.jsp页面,将这两个jsp页面文件放在Web-Root下。 welcome.jsp的代码如下: 成功页面 已经成功登录! 代码中第二行标签库定义将前缀s和uri之间建立映射关系。前缀s指明了所有Struts 2标签在使用的时候以“s:”开头。,2.4.2 详细开发步骤,是一个使用自定义property标签的JSP页面。这个property标签包含一个value属性值,通过设置value的值,标签可以从action中获得相应表达式的内容,这是通过在action中创建了一个名为getUsername()的方法得来的。将以上的代码保存在welcome.jsp文件中。 er

23、ror.jsp的代码如下: 失败页面 登录失败! 步骤9 部署 将应用程序部署到服务器上。启动tomcat,运行程序,在浏览器输入:http:/localhost:8080/struts2/login.jsp。,2.4.3 知识点:Servlet、Filter简介,1Servlet Java Web应用中最重要的概念就是Servlet。 Servlet是用Java编写的服务器端程序,是由服务器端调用和执行的Java类。Servlet运行在Servlet引擎管理的Java虚拟机中,被来自客户机的请求唤醒,能简单地处理客户端的请求。 为了运行Servlet,首先需要一个JVM来提供对Java的基本

24、支持,一般需要安装JRE(Java Runtime Environment)或JDK(Java Develop Kit, JRE是其中的一个子集)。其次,需要Servlet API的支持。一般的Servlet引擎都自带Servlet API。 当容器通过web.xml文件得知配置了Servlet以后,通过配置所指定的class路径构造Servlet实例。 Servlet的周期:初始化服务消亡。初始化在构造实例的时候有容器调用init方法完成,初始化在Servlet的整个生命周期中只进行一次。服务在发生请求时进行,发生一次请求就进行一次服务。消亡通常发生在容器关闭的时候,消亡的时候容器会调用de

25、stroy方法,destroy方法在Servlet的整个生命周期中也只调用一次。 当容器启动的时候会构造一个用来请求处理http请求的线程池,并在适当的时候构造出每一个Servlet实例。当有请求发生的时候,容器就从线程池中取出一个线程来处理这个请求,如果这个请求需要一个Servlet来处理,容器就会将请求传递给对应的Servlet来处理,并将处理的结果返回给处理线程,处理线程将结果返回给请求者,然后线程返回到线程池中等待别的请求。,2.4.3 知识点:Servlet、Filter简介,2Filter 在项目中的web.xml中,有一个名词Filter,这是什么呢?它起了什么作用呢? stru

26、ts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* Filter过滤器是Java中常用的一项技术,过滤器是用户请求和处理程序之间的一层处理程序。这层程序可以对用户请求和处理程序响应的内容进行处理。利用过滤器的这个特点可以用于权限控制,编码转换等场合。,2.4.3 知识点:Servlet、Filter简介,Servlet过滤器是在Java Serlvet规范中定义的,它能够对过滤器关联的URL请求和响应进行检查和修改。Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和

27、Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。Servlet过滤器过滤的URL资源可以是Servlet、JSP、HTML文件,或者是整个路径下的任何资源。多个过滤器可以构成一个过滤器链,当请求过滤器关联的URL的时候,过滤器链上的过滤器链会挨个发生作用。图2-23说明了过滤器的概念。,加过滤器链的请求,加过滤器的请求,正常的请求,图2-23 过滤器处理请求的过程,2.4.3 知识点:Servlet、Filter简介,图中显示了正常请求,加过滤器请求和加过滤器链的请求处理过程。过滤器可以对Request对象和Re

28、sponse对象进行处理。所有的过滤器类都必须实现java.Servlet.Filter接口,这个接口含有3个过滤器类必须实现的方法: (1)init(FilterConfig) 这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以通过FilterConfig参数读取web.xml文件中的Servlet过滤器的初始化参数。 (2)doFilter(ServletRequest,ServletResponse,FilterChain) 这个方法完成实际的过滤操作,当用户请求与过滤器关联的URL时,Servlet容器将先调用过滤器的

29、doFilter方法,在返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过滤器。 (3)destroy() Servlet容器在销毁过滤器实例前调用该方法,这个方法可以释放Servlet过滤器占用的资源。 过滤器编写完成后,要在web.xml进行配置,格式如下: 过滤器名称 过滤器对应的类 参数名称 参数值 ,2.4.3 知识点:Servlet、Filter简介,过滤器必须和特定URL关联才能发挥作用,过滤器的关联方式有3中:与一个URL关联、与一个URL目录下的所有资源关联、与一个Servlet关联。下面,在web.xml中配置过滤器与URL关联。 (1)与一

30、个URL资源关联: 过滤器名 xxx.jsp (2)与一个URL目录下的所有资源关联: 过滤器名 /* (3)与一个Servlet关联: 过滤器名 Servlet名称 ,2.4.3 知识点:Servlet、Filter简介,前面讲述了过滤器的基本概念,那么过滤器有什么用处呢? 常常利用过滤器完成以下功能: (1)权限控制,通过过滤器实现访问的控制,当用户访问某个连接或者某个目录的时候,可以利用过滤器判断用户是否有访问权限。 (2)字符集处理,可以在过滤器中处理request和response的字符集,而不用在每个Servlet或者JSP中单独处理。 (3)其它使用的一切场合,过滤器非常有用,我

31、们可以利用它完成很多适合的工作,如计数器、数据加密、访问触发器、日志、用户使用分析等。,2.4.4 知识点:Struts 2配置,Struts 2的配置可以分成单个单独的文件,如图2-24所示。,图2-24 框架元素的配置文件,2.4.4 知识点:Struts 2配置,其中web.xml是Web部署描述符,包括所有必须的框架组件。struts.xml是Struts 2的主要配置文件。struts.properties是Struts 2框架的属性配置。 web.xml web.xml并不是Struts 2框架特有的文件。作为部署描述文件,web.xml是所有Java Web应用程序都需要的核心配

32、置文件。 Struts 2框架需要在web.xml文件中配置一个前端控制器FilterDispatcher,用于对Struts框架进行初始化,以及处理所有的请求。 FilterDispatcher是一个servlet过滤器,它是整个Web应用的配置项,如下是一个FilterDispatcher的例子: struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* ,2.4.4 知识点:Struts 2配置,2struts.properties文件 Struts 2提供了很多可配置的属性,通过这些属性的设置,可以改变框架的行为

33、,从而满足不同Web应用的需求。这些属性可以在struts.properties文件中进行设置,struts.properties是标准的Java属性文件格式,“”号作为注释符号,文件内容由键(key)值(value)对组成。 struts.properties文件必须位于classpath下,通常放在Web应用程序的/WEB-INF/classes目录下。 Struts 2在default.properties文件(位于struts2-core-2.0.11.jar)中给出了所有的属性的列表,并对其中一些属性设置了默认值。如果开发人员创建了struts.properties文件,那么在该文件

34、中的属性设置会覆盖default.properties文件中的属性设置。 在开发环境中,以下几个属性是可能会被修改的: struts.i18n.reload=true 激活重新载入国际化文件的功能 struts.devMode=true 激活开发模式,提供更全面的调试功能 struts.configuration.xml.reload=true 激活重新载入XML配置文件的功能,当文件被修改以后,就不需要你载入Servlet容器中的整个Web应用了。 struts2.url.http.port=8080 配置服务器运行的端口 3stuts.xml文件 struts.xml是Struts 2框架

35、的核心配置文件,主要用于配置和管理开发人员编写的action。struts.xml文件通常放在Web应用程序WEB-INF/classes目录下,在该目录下的struts.xml将被Struts 2框架自动加载。,2.4.4 知识点:Struts 2配置,struts.xml文件是一个XML文件,所以最开始的元素就是XML版本和编码信息。接下来则是XML的文档类型定义(DTD)。DTD提供了XML文件中各个元素应使用结构的信息,而这些最终会被XML解析器或者编辑器使用。 标签,位于Struts2配置的最外层,其它标签都是包含在它里面的。 Package元素 Struts 2中的包类似于Java

36、中的包,提供了将action、result、result类型、拦截器和拦截器栈组织为一个逻辑单元的一种方式,从而简化了维护工作,提供了重用性。 与Java中的包不同的是,Struts 2中的包可以扩展另外的包,从而“继承”原有包的所有定义,并可以添加自己包特有的配置,以及修改原有包的部分配置,从这一点上看,Struts 2中的包更像Java中的类。,2.4.4 知识点:Struts 2配置,package元素有一个必须的属性name,指定包的名字,这个名字将作为引用该包的键。要注意的是,包的名字必须是唯一的,在一个struts.xml文件中不能出现两个同名的包。package元素的extend

37、s属性是可选的,允许一个包继承一个或多个先前定义的包中的配置。package元素的abstract属性是可选的,将其设置为true,可以把一个包定义为抽象的。抽象包不能有action定义,它只能作为“父”包,被其他的包所继承。 下面是一个包定义的例子。 viewSource.jsp /empmanager/listSkills.jsp ,2.4.4 知识点:Struts 2配置, Namespace属性 package元素的 namespace属性可以将包中的action配置为不同的名称空间。 当Struts 2接收到一个请求的时候,它会将请求URL分为namespace和action名字两部

38、分,Struts 2会从struts.xml中查找namespace/action这个命名对,如果没有找到,Struts 2就会在默认的名称空间中查找相应的action名。 默认的命名空间用空字符串” ”来表示,当在定义包中没有使用namespace属性,那么就指定了默认的名称空间。 下面是一个Struts 2文档中给出的名称空间的例子。 greeting.jsp bar.jsp ,2.4.4 知识点:Struts 2配置, moo.jsp bar2.jsp 如果请求/barspace/bar.action,框架将首先查找/barspace名称空间,如果找到了,则执行bar action;如果

39、没有找到,则到默认的名称空间中继续查找。在本例中,/barspace名称中有名为bar的action,因此它会被执行。 如果请求/barspace/foo.action,框架会在/barspace名称空间中查找foo这个action。如果找不到,框架会到默认命名空间中去查找。在本例子中,/barspace名称空间中没有foo这个action,因此默认空间中的/foo.action将被找到并执行。,2.4.4 知识点:Struts 2配置,如果请求/moo.action,框架会在根名称空间/中查找moo action,如果没有找到再到默认名称空间中查找。 Action元素 Struts 2的核心

40、功能是action,对于开发人员来说,使用Strtus2框架,主要的编码工作就是编写action类。action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。 当然,Struts 2并不要求所编写的action类一定要实现Action接口,也可以使用一个普通的Java类作为一个action,只要该类提供一个返回类型为String的无参的public方法。 在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSuppoort类继承。ActionSu

41、pport实现了Action接口和其他一些 可选的接口,提供了输入验证、错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的开发。 开发好action后,就需要配置acton映射,以告诉Struts 2框架,针对某个URL的请求应该交由哪一个action进行处理。 当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。如: /success.jsp /error.jsp ,2.4.4 知识点:Struts 2配置,class属性是Action实现类的完整类名。在执行action时,默认调用的是execute()方法。如上面例子中请

42、求login.action时,将调用org.apex.struts2.action.LoginAction实例的execute()方法。 也可以通过action元素的method属性来指定action调用的方法所指定的方法。在struts.xml文件中,可以为同一个action类配置不同的别名,并使用method属性,如: /listNews.jsp /list.action /editNews.jsp /list.action ,2.4.4 知识点:Struts 2配置, Result元素 一个result代表了一个可能的输出。当Action类的方法执行完成时,它返回一个字符串类型的结果码,

43、框架根据这个结果码选择对应的result,向用户输出。 在com.opensymphony.xwork2.Action接口中定义了一组标准的结果代码,可提供开发人员使用,如下所示: public interfact Action public static final String SUCCESS = ”success”; public static final Strng NONE = ”none” ; public static final String ERROR = ”error”; public static final String INPUT = ”input”; public

44、static final String LOGIN = ”login”; 除了这些预定义的结果码以外,开发人员也可以定义其他的结果码来满足自身应用程序的需要。 如下所示: /success.jsp /error.jsp ,2.4.4 知识点:Struts 2工作机制,一个请求在Struts 2框架被处理大致分为以下几个步骤,如图2-25所示: (1)客户端初始化一个指向Servlet容器(例如Tomcat)的请求; (2)这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其它框架的集成很有帮助,

45、例如:SiteMesh Plugin); (3)接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action; (4)如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy; (5)ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类; (6)ActionProxy创建一个ActionInvocation的实例; (7)ActionInvocation实例使用命名模式来调用

46、,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用; (8)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts 2 框架中继承的标签,在这个过程中需要涉及到ActionMapper。,2.4.4 知识点:Struts 2工作机制,图2-25 Struts 2工作机制,2.4.4 知识点:Struts 2工作机制,在本节的例子中,当浏览器发送请求http:/

47、localhost:8080/struts2/login.action请求的时候,在服务器上发生了如下事件: (1)服务器接收到login.action的请求,根据web.xml文件的配置,所有的请求都会被org.apache.struts2.dispatcher.FilterDispatcher过滤,FilterDispatcher.FilterDispatcher是Struts 2框架的入口点。 (2) Struts2框架查找login.action对应的Java类,发现是LoginAction.java.之后,Struts 2框架实例化了一个LoginAction类,并调用了这个类的ex

48、ecute方法。 (3)execute方法设置了username和password的内容,并且返回SUCCESS。框架设定返回SUCCESS的话,找到相应的welcome.jsp,并通知服务器将welcome.jsp作为返回内容。如果返回ERROR的话,则返回error.jsp。 (4) 在welcome.jsp被处理的过程中,标签的内容被替换为LoginAction的getUsername()方法调用的结果。 (5) 根据welcome.jsp(或者error.jsp)内容生成的HTML内容被发回到请求的浏览器, 图2-26显示了处理流程。,2.4.4 知识点:Struts 2工作机制,图2

49、-26 应用的处理流程,2.5 开发第一个Hibernate程序,2.5.1 概述 Hibernate是对象/关系映射(ORM)的一个解决方案。简单地说就是将Java中对象及对象之间的关系映射至关系数据库中的表格及表格之间的关系。Hibernate提供了整个过程自动转换的方案。 Hibernate是Java应用和关系数据库之间的关系,负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。 这里将演示如何将一个内存的User类型的对象user进行持久化处理,变为表格user中的一条记录,如图2-27所示。,图2-

50、27 Hibernate持久化,2.5.1 概述,项目最后的目录树如图2-28所示。,图2-28 项目目录树,程序主要步骤: 步骤1:在数据库MySQL中创建表user,用于记录用户的名称和密码 步骤2:在MyEclipse中创建对MySQL的连接 步骤3:在MyEclipse中创建Java Project,命名为hibernate 步骤4:添加Hibernate支持包到项目中 步骤5:生成数据库表对应的Java数据对象和映射文件 步骤6:创建测试类。,2.5.2 详细开发步骤,步骤1 在数据库MySQL中创建表user,用于记录用户的名称和密码。 CREATE DATABASE test;

51、use test; CREATE TABLE user( id int(10) not null auto_increment, username varchar(10) not null, password varchar(10) not null, primary key(id) )ENGINE=InnoDB DEFAULT CHARSET=GBK; 步骤2 在MyEclipse中创建对MySQL的连接 启动MyEclipse,选择菜单WindowOpen PerspectiveMyEclipse Database Expoer,打开MyEclipse Database浏览器,右击菜单,选

52、择New,如图2-29所示,,创建一个新的数据库连接,图2-29 MyExlipse Database浏览器,创建一个新的连接,2.5.2 详细开发步骤,出现如图2-30所示的对话框,编辑数据库连接驱动。,连接到本机3306端口的test数据库,图2-30 编辑数据库连接驱动,2.5.2 详细开发步骤,编辑完成以后,在MyEclipse Database浏览器中,选中刚才创建的mysql数据库连接,选择Open connection.,打开名为mysql的数据连接,如图2-31所示。,图2-31 打开数据库连接,步骤3在MyEclipse中创建Java Project,命名为hibernate

53、。 步骤4 添加Hibernate Capabilites到项目中。 右击项目hibernate,选择MyEclipseAdd Hibernate Capabilites来启动向导,将出现Hibernate配置向导。首先出现图2-32所示对话框,选择Hibernate框架所需要的类库。,2.5.2 详细开发步骤,选择需要的类库集合, 这个示例中Core类库集足够了,要添加到项目中的Hibernate版本支持功能,为了最大限度的使用MyEclipse Hibernate工具, 推荐Hibernate 3.1,选中的类库将会添加到项目的构造路径中,但是相应的JAR文件不会复制到项目中.这些JAR文

54、件将会在发布程序时复制。,选中的类库JAR文件将会被复制到项目并添加到构造路径中。,图2-32 添加JAR包,2.5.2 详细开发步骤,选择“Next”按钮,进入如图2-33所示界面。用于创建Hibernate配置文件。,定义配置文件的名称和路径,图2-33 创建hibernate.cfg.xml,2.5.2 详细开发步骤,选择“Next”,进入如图2-34所示界面,指定Hibernate数据库连接细节。由于在前面已经配置一个名为mysql的数据库连接,所以这里只需要选择DB Driver为mysql即可。,选择前面创建的名字为“mysql”的数据连接。,图2-34 指定hibernate数据

55、库连接,2.5.2 详细开发步骤,点击“Next”,出现如图2-35所示界面。Hibernate中有一个与数据库打交道重要的类Session。而这个类是由工厂SessionFactory创建的。这个接口询问是否需要创建SessionFactory类,如果需要创建,还需要指定创建的位置和类名。,图2-35 创建SessionFactory类来简化Hibernate会话处理,2.5.2 详细开发步骤,点击“Finish”。通过这些步骤,项目中增加了一些Hibernate JAR包和一个hibernate.cfg.xml配置文件,一个HibernateSessionFactory.java类。 步骤

56、5 生成数据库表对应的Java数据对象和映射文件 首先在MyEclispse下创建一个名为vo的包,这个包将用来存放与数据库表格对应的Java类User。 从主菜单栏,选中WindowsOpen PerspectiveOtherMyEclipse Database Explorer,打开MyEclipse Database Explorer视图。打开前面创建的mysql数据连接,选中数据库表user,右击,选择菜单Hibernate Reverse Engineering,如图2-36所示,将启动Hibernate Reverse Engineering向导。,图2-36 Hibernate反

57、向工程菜单,2.5.2 详细开发步骤,将启动Hibernate Reverse Engineering向导,该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置的工作。 首先,如图2-37所示,选择生成的Java类和映像文件所在的位置。,图2-37 生成Hibernate映射文件和Java类,2.5.2 详细开发步骤,POJO(Plain Old Java Object,简单的Java对象),通常也称为VO(Value Obect,值对象)。使用POJO名称是为了避免和EJB混淆起来,其中有一些属性及getter setter方法的类。当然,如果有一个简单的运算属性也是可以的

58、,但不允许有业务方法。 例如,在程序中的User.java类就是一个POJO,它由MyEclipse根据表user直接生成,代码如下: 点击“Next”,进入如图2-38所示界面,配置映像文件的细节。,2.5.2 详细开发步骤,决定是否在类型映射属性中使用Java或者Hibernate类型,持久类实例的唯一主键生成器Java类,图2-38 配置反向工程细节,2.5.2 详细开发步骤,点击“Next”,进入如图2-39所示界面,主要用于配置反向工程的细节。,包含反向工程时当前数据库引用的表格以及其它引用到当前表的数据库表,生成关联到当前表格的关联表的尚未反向工程过的代码,这些表在当前配置页面尚未

59、被显示,图2-39 配置反向工程细节,2.5.2 详细开发步骤,点击“Finish”。 步骤6创建测试类 创建一个新的Java类,用于向数据库插入一条记录,并在控制台显示出来。 Test.java代码如下: 运行程序,结果如图2-40所示。,图2-40 运行结果,2.5.3 知识点:Hibernate:Configuration File配置文件,在src目录下,生成了一个hibernate.config.xml文件,里面的主要内容如下: root jdbc:mysql:/localhost:3306/test org.hibernate.dialect.MySQLDialect mysql

60、root com.mysql.jdbc.Driver ,2.5.4 知识点:Hibernate主要接口,在Hibernate中,Session负责完成对象持久化操作。Session实例的创建,大致需要以下三个步骤: (1)初始化Hibernate配置管理类Configuration。 根据传入或者默认的配置文件(hibernate.cfg.xml)来创建并初始化一个Configuration类的实例: Configuration config=new Configuration().configure(); (2)通过Configuration类实例创建Session的工厂类SessionFa

61、ctory: SessionFactory sessionFactory=config.buildSessionFactory(); (3)通过SessionFactory得到Session实例: session=sessionFactory.openSession(); 得到Session实例后,就可以在测试方法中加以使用。 1Configuration 正如此名,Configuration类负责管理Hibernate的配置信息。Hibernate运行时需要一些底层实现的基本信息。这些信息包括: 数据库URL 数据库用户 数据库用户密码 数据库JDBC驱动类 数据库dialect,用于对特定

62、数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。,2.5.4 知识点:Hibernate主要接口,使用Hibernate必须首先提供这些基础信息以完成初始化工作,为后续操作做好准备。这些属性在hibernate配置文件hibernate.cfg.xml中加以设定,当调用: Configuration config=new Configuration().configure(); 时,Hibernate会自动在目录下搜索hibernate.cfg.xml文件,并将其读取到内存中作为后续操作的基础配置。 2SessionFactory

63、 SessionFactory负责创建Session实例,可以通过Configuration实例构建SessionFactory。 Configuration confg=new Configuration().configure(); SessionFactory sessionFactory=config.buildSessionFactory(); Configuration实例config会根据当前的数据库配置信息,构造SessionFacory实例并返回。SessionFactory一旦构造完毕,即被赋予特定的配置信息。也就是说,之后config的任何变更将不会影响到已经创建的Ses

64、sionFactory实例sessionFactory。如果需要使用基于变更后的config实例的SessionFactory,需要从config重新构建一个SessionFactory实例。同样,如果应用中需要访问多个数据库,针对每个数据库,应分别对其创建对应的SessionFactory实例。 SessionFactory中保存了对应当前数据库配置的所有映像关系,同时也负责维护当前的二级数据缓存和Statement Pool。由此可见,SessionFactory的创建过程非常复杂、代价高昂,而这也意味着,在系统设计中充分考虑到SessionFactory的重用策略。由于SessionFa

65、ctory采用了线程安全的设计,可由多个线程并发调用。大多数情况下,一个应用中针对一个数据库共享一个SessionFactory实例即可。,2.5.4 知识点:Hibernate主要接口,3Session Session是Hibernate持久化操作的基础,提供了众多持久化方法,如save、update、delete等。通过这些方法, 透明地完成对象的增删改查等操作。 同时,值得注意的是,Hibernate Session的设计是非线程安全的,即一个Session实例同时只可由一个线程使用,同一个Session实例的多线程并发调用将导致难以预知的错误。 Session实例由SessionFactory构建: Configuration config=new Configuration().configure(); SessionFactory sessionFactory=config.buldSessionFactory(); Session session=sessionFactory.openSession(); 之后就可以调用Session提供的save、get、delete等方法完成持久层操作: Save /新增名为“Tom”的用户记录 User user=new User(); User.setName(“Tom”); session.sa

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!