基于SSH架构模式的应用开发.ppt

上传人:文库蛋蛋多 文档编号:2310989 上传时间:2023-02-10 格式:PPT 页数:34 大小:2.78MB
返回 下载 相关 举报
基于SSH架构模式的应用开发.ppt_第1页
第1页 / 共34页
基于SSH架构模式的应用开发.ppt_第2页
第2页 / 共34页
基于SSH架构模式的应用开发.ppt_第3页
第3页 / 共34页
基于SSH架构模式的应用开发.ppt_第4页
第4页 / 共34页
基于SSH架构模式的应用开发.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《基于SSH架构模式的应用开发.ppt》由会员分享,可在线阅读,更多相关《基于SSH架构模式的应用开发.ppt(34页珍藏版)》请在三一办公上搜索。

1、基于SSH架构模式的应用开发,郑州大学信息工程学院,MVC架构模式的简单介绍。Struts工作原理及实例开发。Spring实例开发。Hibernate数据库持久层技术。,主要内容,MVC是Model-View-Controller的缩写,中文翻译为“模式-视图-控制器”。MVC是一种常用的设计模式。MVC减弱了业务逻辑接口和数据接口之间的耦合,让视图层更富于变化。MVC的目的就是实现Web系统的职能分工。Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。View层用于与用户的交互,通常用JSP来实现。Controller层是Model和View之间沟通的桥梁,它可以分

2、派用户的请求并选择恰当的视图用于显示,同时它也可以解释用户的输入并将他们映射为模型层可执行的操作。,1.MVC架构模式的简单介绍,图1.1 MVC的工作原理,MVC的工作原理如图1.1所示:,View(视图),Controller(控制),Model(模型),低耦合性。高重用性和可适用性。较低的生命周期成本。快速的部署。可维护性。有利于软件工程化管理。MVC的缺点:由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划由于它的内部原理比较复杂,所以需要花费一些时间去思考。,MVC的优点:,Jsp+Servlet+JavaBean。Jsp+Struts+JavaBean。

3、SSH(Struts+Spring+Hibernate)。Jsp+JavaBean(Controller)+JavaBean(Model)。,Java开发Web Application常用的MVC设计模式:,Struts是Jakarta项目组的一个Open Source项目,它采用MVC模式,能够很好的帮助Java开发者利用J2EE开发Web应用。Struts框架的核心是一个弹性控制层,基于如Java Servlets、JavaBean、ResourceBundles和XML等标准技术,以及Jakarta Commons的一些类库。Struts有其自己的控制器(Controller),同时整合

4、了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据库访问技术相结合。在视图层,Struts能够与JSP(包括JSTL和JSF)、Velocity模板、XSLT及其他表示层技术完美结合。,2.Struts工作原理及实例开发,Struts的体系结构包括模型(Model),视图(Views)和控制器(Controller)三部分。如图2.1所示:图2.1 Struts的体系结构,2.1 Struts的体系结构,客户浏览器,控制器Servlet,视图JSP,业务逻辑动作,模型应用程序状态,事件,HTTP响应,调度,获取,转向,更新,HTTP响应,模

5、型(Model)在Struts的体系结构中,模型分为两个部分:系统的内部状态和可以改变的状态的事务逻辑。内部状态通常由一组ActionForm Bean表示。这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据。建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。视图(View)视图主要由JSP建立,Struts包含扩展自定义标记库,可以简化创建完全国际化用户界面的过程。目前的标记库包括Bean Tags、HTML tags、Logic Tags、Nested Tags以及Template Tags等。控制器(Controller)在Struts中,基本

6、的控制器组件是ActionServlet类的实例servlet,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping与ActionForward这几个组件协调来完成,其中Action扮演真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。,从MVC角度看Struts的框架:,整个Struts大约由15个包,近200个类所组成,而且数量还在不断的扩展。目前Struts API中几个基本的组件包包括action、action

7、s、config、util、taglib、validator等。表2.1 Struts API中几个基本的组件包,2.2 Struts的基本组件包,Struts的优点有:Struts与Tomcat、Turbine等诸多Apache项目一样,是开源的软件,这是它的一大优点,使开发者能更深入地了解其内部的实现机制。Taglib和页面导航。其中Taglib是Struts的标记库,灵活使用能大大提高开发的效率。关于页面导航,将是今后的一个发展方向,使系统的脉络更加清晰。Struts的缺点有:增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图、控制器分离,降低运行效率。视图与控制

8、器间的过于紧密的连接。视图与控制器应试相互分离的,某些过于紧密的连接妨碍了它们的独立重用。视图对模型的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够显示的数据。对未变化数据的不必要的频繁访问,也将损害操作性能。,2.3 Struts的优缺点,使用Struts实现一个完整的用户登录系统的实例。登录程序组件的介绍:本例主要用MyEclipse8.5插件的Struts Designer(Struts图形化开发环境)来开发用户登录程序。实例主要由3个JSP文件、2个Java类和2个配置文件组成。userLogin.jsp:用户登录页面,填写成功登录后显示的页面。userLogin

9、Success.jsp:用户成功登录后显示的页面。userLoginFailure.jsp:用户登录失败后显示的页面。LoginForm.java类:这是Struts中一个ActionForm类,用来接收客户输入的数据,并进行初步的数据合理性验证。UserLoginAction.java类:这是Struts中的一个Action类,用户进行用户身份验证,根据结果返回ActionForward类。struts-conf.xml:这是struts中的配置文件,是任何一个struts程序中必不可少的文件。web.xml:Tomcat的应用配置文件。,2.4 Struts实例,在MyEclipse8.5

10、中选择File-New-Project菜单命令,在弹出的New Project对话框中新建一个J2EE的Web Project项目。单击Next按钮,在Project name文本框中输入项目名“LoginDemo”,其余保持默认,单击Finish按钮。添加支持的Struts功能组件。选择MyEclipse-Add Struts Capabilities命令,Struts specification为版本号,这里选择“Struts1.2”;对URL pattern我们选择“*.do”;对Base package for new classes设置为“”;Default application

11、resources中为默认的资源文件。单击Finish按钮。,详细步骤:,双击打开struts-config.xml文件,默认情况下进入的是可视化设计界面。单击窗口左侧Palette栏中的JSP按钮,然后再设计窗口中单击,将弹出Create a new JSP page对话框,这里我们新建一个JSP文件。在File Name中输入“userLoginSuccess.jsp”,单击Finish按钮。用同样的方法,再新建一个JSP文件,命名为userLoginFailure.jsp,作为用户登录失败后所显示的页面。在struts-config.xml的Design模式中,单击鼠标右键,选择New-

12、Form,Action and JSP菜单命令,Use case为userLogin,在Form Properties选项卡中单击Add按钮,来添加相关值,添加两个属性:userName和password。在添加password时,要将type设置为“password”。选中JSP选项卡,选中“Create JSP form”,然后选择Method选项卡,将Methods的第1个和第2个方法选中,分别创建错误处理方法和重置方法,单击Next按钮,进入Action选项界面。将Option Details栏下Form选项卡中的“Validate Form”取消选择,然后在Forwards选项卡单击

13、Add按钮,分别添加成功和失败时返回的页面。,设计struts-config.xml:,单击Finish按钮,在struts-config.xml的Design中,可以看到如图2.2所示的关联图。MyEclipse已经建立好了JSP、ActionForm和Action之间的关系。图2.2 struts-config.xml的Design中的关联图,在Package Explorer窗口中的form文件夹中双击打开userLogin.jsp。修改所有以开头的语句修改后的内容如下:在WEB-INF目录下生成一个web.xml文件,打开web.xml文件,为其添加Struts标记库。UserLogi

14、nAction.java类用来对用户名和密码进行验证,并且进行响应操作,对类中的execute方法进行完善如下:,关键代码:,public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)UserLoginForm userLoginForm=(UserLoginForm)form;/TODO Auto-generated method stub/判断用户名是否为admin,密码是否为123456if(userL

15、oginForm.getUserName().equals(admin)部署并运行Struts程序:在浏览器中输入http:/localhost:8080/LoginDemo/form/userLogin.jsp在出现的登录页面中输入用户名“admin”,密码“123456”,提交后则显示成功登录信息,当输入错误用户名或密码时则显示错误信息。,Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许用户选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring框架是由Rod Johnson首先创建的,他在其著作Exce

16、pt One-on-One:J2EE Design and Development中阐述过这个框架。简单地说,Spring是一个轻量级的Ioc(反向控制)和AOP(面向方面编程)容器框架。,3.Spring实例开发,Spring框架是由7个模块(或组件)组成的(如图3.1所示)。从整体上看,这7个模块提供了开发企业级应用系统所需要的一切。但是我们不必将系统完全建立在Spring框架上,可以自由选择适合自己的系统模块,而不必使用其他模块。图3.1 Spring框架的7个模块,3.1 Spring框架的组成,AOP模块,O/R映射模块,JDBC和DAO模块,Web Cibtext和Utility模

17、块,ApplicationContext模块,MVC框架,核心容器和支持工具,组成Spring框架的每个模块都可以单独存在,或者与其他一个或多个模块联合实现。各个模块功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器主要组件是BeanFactory,它是工厂(Factory)模式的实现。Context模块:Spring Context(上下文)模块是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI(Java命名和目录接口)、EJB、电子邮件、国际化、校验和调度功能。AOP模块:通过配置管理特性,Spring AOP模块直接将面向方面

18、的编程功能集成到了Spring框架中。JDBC和DAO模块:JDBC和DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误信息。ORM模块:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。Web模块:Web模块简化了处理多部分请求以及将请求参数绑定到域对象的工作。MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。,给出一个基本的Spring入门示例,并演示如何使用Spring的AOP将复杂的业务逻辑分离到每个方面中。主要步骤:新建并配置项目新建普通

19、Java项目MySpring。创建项目的时候将src目录和bin目录分开。在MyEclipse中选择Add Spring Capabilities命令,本例使用到Spring的AOP类库,选中第1项,其它保持默认值不变,单击Finish按钮。编写Bean接口及其实现在Spring的开发中无法自动生成Bean文件,需要用户手动添加。首先定义一个ServiceBean接口,声明一些业务方法。编写一个MyServiceBean类,然后在该类中实现ServiceBean接口。编写一个main方法测试。配置Bean并获得Bean的实例。,3.2 开发一个Spring示例,为获得更大的灵活性和可测试性。把

20、ServiceBean交给Spring来管理,新建一个beans.xml配置文件,放到src目录下,确保在classpath中能找到此配置文件。修改main方法,让Spring来管理业务Bean,再次执行程序。与先前main方法相比,最大的变化是不需要自己管理Bean的生命周期,另一个好处是在不改变实现类的前提下,动态地为应用程序增加功能。编写Advisor以增强ServiceBean编写一个LogAdvisor类,对每个业务方法调用前都作一个记录。编写一个PasswordAdvisor类将截获ServiceBean的getPassword()方法的返回值,并将其改为“*”。编写一个Excep

21、tionAdvisor类,在业务方法抛出异常时能做一些处理。修改beans.xml文件再次执行main方法。小结通过上面的简单的例子发现,利用Spring非常强大的IoC容器和AOP功能,让Spring容器管理业务对象的生命周期,利用AOP增强功能,却不影响业务接口,从而避免更改客户端代码。,ServiceBean接口:public interface ServiceBean public void addUser(String username,String password);public void deleteUser(String username);public boolean fi

22、ndUser(String username);public String getPassword(String username);LogAdvisor类:public void before(Method m,Object args,Object target)throws Throwable System.out.println(Log+target.getClass().getName()+.+m.getName()+();,关键代码:,PasswordAdvisor类:public Object invoke(MethodInvocation invocation)throws Th

23、rowable Object ret=invocation.proceed();if(ret=null)return null;String password=(String)ret;StringBuffer encrypt=new StringBuffer(password.length();for(int i=0;ipassword.length();i+)encrypt.append(*);return encrypt.toString();ExceptionAdvisor类:public void afterThrowing(RuntimeException re)throws Thr

24、owableSystem.out.println(Exception+re.getMessage();,Hibernate是基于对象/关系映射(Object/Relational Mapping,ORM)的一个解决方案。它的工作原理是通过文件在值对象和数据库表之间建立一个映射关系,这样我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。示例的组件介绍stu表:记录学生的学号和姓名等信息。Stu.java:JavaBean文件,用来传递数据。Insert.java:用来演示向stu表中插入记录。Select.java:用来演示查询stu表中的所有记录。U

25、pdate.java:用来演示更新stu表中的记录。Delete.java:用来演示删除stu表中的记录。hibernate.cfg.xml:用来连接数据库文件。Stu.hbm.xml:用来对数据库中的表进行映射,指出类与表、类属性与表字段的对应关系。,4.Hibernate数据库持久技术,新建数据库并与MyEclipse建立连接使用mysql数据库,新建一个名为student的数据库,在数据库中新建一个stu表,包含2个字段,id(Integer,主键,自增变量),name(varchar(20),not null)。在MyEclipse中新建Java项目,命名为“My_Hibernate”

26、。选择Window-Open Perspective-Other菜单命令,选择“MyEclipse Database Explorer”,右键选择New命令。对相关属性进行设置。其中,Driver name为自定义数据库连接名字,Connection URL为数据库服务器主机名,User name和Password分别为登录数据库的用户名和密码。单击Driver JARs后面的Add JARs按钮,添加mysql数据库驱动,点击Finish按钮,在新建的数据库连接上右击,选择Open connection命令,打开数据库连接,验证是否连接成功。,主要步骤:,添加Hibernate类库返回Jav

27、a编辑窗口,选择MyEclipse-Add Hibernate Capabilites命令,添加Hibernate类库,单击Next按钮,创建数据库配置文件,继续单击Next按钮,在DB Driver下拉列表选择创建好的数据库连接,单击Next按钮,新建SessionFactory文件,最后点击Finish按钮。建立数据表映射文件返回MyEclipse的数据库浏览器窗口,在表stu上右击,选择Hibernate Reverse Engineering,分别设置Java源文件位置,新建Java包,点击Finish按钮。返回Java编辑窗口,在映射文件Stu.hbm.xml中将改为这样id每次自动

28、增加1。对数据表进行操作编写几个Java类通过Hibernate对数据表进行测试操作。,Insert.javapublic class Insert public static void main(String args)try Configuration c=new Configuration();Configuration cc=c.configure();SessionFactory sf=cc.buildSessionFactory();Session session=sf.openSession();Transaction ts=session.beginTransaction();

29、Stu stu=new Stu();stu.setName(刘备);session.save(stu);mit();session.close();catch(HibernateException e)e.printStackTrace();,关键代码:,Select.javapublic class Select public static void main(String args)try SessionFactory sf=new Configuration().configure().buildSessionFactory();/通过openSession()建立一个connectio

30、n连接Session session=sf.openSession();Query query=session.createQuery(select t from Stu t);List list=query.list();Iterator it=list.iterator();while(it.hasNext()Stu stu=(Stu)it.next();System.out.println(学号:+stu.getId()+姓名:+stu.getName();session.close();catch(HibernateException e)/TODO Auto-generated ca

31、tch blocke.printStackTrace();,Update.javapublic class Update public static void main(String args)try Configuration c=new Configuration();Configuration cc=c.configure();SessionFactory sf=cc.buildSessionFactory();Session session=sf.openSession();Transaction ts=session.beginTransaction();/更新id为2的记录Stu

32、stu=(Stu)session.load(Stu.class,new Integer(2);stu.setName(关羽);session.flush();mit();session.close();catch(HibernateException e)e.printStackTrace();,Delete.javapublic class Delete public static void main(String args)try Configuration c=new Configuration();Configuration cc=c.configure();SessionFactor

33、y sf=cc.buildSessionFactory();Session session=sf.openSession();Transaction ts=session.beginTransaction();/更新id为1的记录Stu stu=(Stu)session.load(Stu.class,new Integer(1);session.delete(stu);mit();session.close();catch(HibernateException e)e.printStackTrace();,Session接口Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是

34、完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。SessionFactory接口SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个Sessio

35、nFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。,Hibernate核心接口:,Configuration接口Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。Transaction接口Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。Query和Criteria接口Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。,Q&A Thanks!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号