第10章应用框架在JSP开发中的应用10.1、什么是应用架构10.2、JSP开发利器-Struts10.3、关系数据库持久化工具-Hibernate10.4、集大成者-Spring10.5、其他Web开发架构简介10.1什么是应用框架应用框架,就是Framework,确切地说,是介于普通代码和实际应用程序之间的半成品。应用框架把一些不同的实际应用程序中具有共通性的东西抽出来,这些共通性的东西是完成实际应用程序不可或缺的部件,或者是在这类应用程序开发过程中必须完成、耗费最多的工作。在系统开发过程中,能够利用别人已经开发过的、被实践检验过的应用框架,就相当与别人帮助自己完成了相当大的一部分基础性开发工作,使得开发者能够将注意力集中在业务逻辑上,这样自然能够大大地提高开发效率,减少系统开发的成本和周期。可采用的成熟应用框架很多,如Struts、Hibernate、Spring等。Struts框架对Web开发的支持是相当完备的。Struts采用MVC架构,它的View层是JSP;它的Controller层是一个独立的Servlet类,即ActionServlet;它的Module层包括一些称之为Form和Action的Java类。10.2JSP开发利器-Struts10.2.1获取Struts从Apache网站上下载:如Struts-1.3.8-all.zip文件。解压已下载的ZIP文件,找到app/struts-blank-1.3.8.war,将其复制到Tomcat的webapps目录下,然后运行Tomcat,则该.war文件自动解压,生成struts-blank-1.3.8文件夹。该文件夹包含Struts的主要jar包和几个核心控制文件。10.2JSP开发利器-Struts10.2.2Struts的MVCActionServletJSPJSPInitialPage(JSP/HTML)FormActionStruts-config.xmlsubmit对RegisterForm.java和RegisterAction.java编译编译时首先设置好classpath,添加struts-core-1.3.10.jar和servlet-api.jar编译命令:javac–d.RegisterForm.java编译后就可直接按Packagebook.actionform指令在当前目录下创建.\book\actionform\RegisterForm.class同理,可编译RegisterAction.javajavac–d.RegisterAction.java在Webapp目录下创建classes目录,把建好的包book下的文件拷贝到该classes目录下即可。10.2.3一个简单的例子Hibernate是一个面向Java环境的对象-关系数据库映射工具。由于现在流行的数据库系统,大都是属于关系型数据库;而开发语言,如Java等,往往是面向对象的开发语言,把面向对象的软件和关系数据库一起使用,可能是相当麻烦且又浪费时间和精力。而Hibernate在提供Java类到真实的数据库表的映射的同时,还提供数据查询和获取数据的方法,可以大幅度减少开发时手工使用SQL和JDBC处理数据的时间。10.3关系数据库持久化工具-Hibernate10.3.1获取Hibernate从官方网站上下载:下载的压缩包包括Hibernate的jar包等。Antlr-2.7.6.jarCglib-2.1.3.jarAsm.jarAsm-attrs.jarCommons-collections-2.1.1.jarCommons-logging-1.0.4.jarJta.jarDom4j-1.6.1.jarLog4j-1.2.11.jar10.3关系数据库持久化工具-HibernateSpring开发框架是较新的开发模式,它规模小,但内涵丰富,同时又很容易和其他框架结构相融合,为JavaWeb开发注入了新鲜的活力。10.4集大成者-Spring10.4.2获取Spring从官方网站上下载:下载的压缩包包括Spring的jar包等。Spring-framework-2.0.5-with-dependencies.zipSpring-framework-2.0.5.zip10.4.3Spring的基础概念:依赖注入(DependencyInjection)所谓依赖注入,就是说组件之间的依赖关系由容器在运行期决定,可以形象地理解为由容器动态地将某种依赖关系注入到组件之中。10.4.3依赖注入(例子)publicclassCatimplementsIAnimal{publicvoideat(){System.out.println(猫咪正在吃东西。。);}}PublicclassFeedAnimal{publicstaticvoidmain(String[]args){CatmyCat=newCat();myCat.eat();}}10.4.3依赖注入(例子)publicclassDogimplementsIAnimal{publicvoideat(){System.out.println(“小狗在进食……);}}PublicclassFeedAnimal{publicstaticvoidmain(String[]args){DogmyDog=newDog();myDog.eat();}}10.4.3依赖注入(例子)publicclassFeedAnimal{publicstaticvoidmain(String[]args){try{StringclassName=args[0];IAnimaloAnimal=(IAnimal)Class.forName(className).newInstance();oAnimal.eat();}catch(Exceptione){e.printStackTrace();}}}