项目开发入门JavaEE框架与MVC模式

上传人:re****.1 文档编号:568029385 上传时间:2024-07-23 格式:PPT 页数:63 大小:2.67MB
返回 下载 相关 举报
项目开发入门JavaEE框架与MVC模式_第1页
第1页 / 共63页
项目开发入门JavaEE框架与MVC模式_第2页
第2页 / 共63页
项目开发入门JavaEE框架与MVC模式_第3页
第3页 / 共63页
项目开发入门JavaEE框架与MVC模式_第4页
第4页 / 共63页
项目开发入门JavaEE框架与MVC模式_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《项目开发入门JavaEE框架与MVC模式》由会员分享,可在线阅读,更多相关《项目开发入门JavaEE框架与MVC模式(63页珍藏版)》请在金锄头文库上搜索。

1、2.1Struts 2让网页与控制分离让网页与控制分离2.22.3Hibernate把数据持久化把数据持久化MVC框架开发模式框架开发模式2.1.1 Struts 2框架框架1Model2模式模式Model2模式的工作原理如图2.1所示,其工作流程是按如下5个步骤进行的:Servlet接收浏览器发出的请求。Servlet根据不同的请求调用相应的JavaBean。JavaBean按自己的业务逻辑操作数据库。Servlet将结果传递给JSP视图。JSP将后台处理的结果呈现给浏览器。2Servlet Filter技术技术图2.2中显示了正常请求、加过滤器请求和加过滤器链请求的处理过程。过滤器可以对R

2、equest对象和Response对象进行处理。(1)init(FilterConfig)。这是过滤器的初始化方法,Servlet容器创建过滤器实例后将调用这个方法。在这个方法中可以通过FilterConfig参数读取web.xml文件中过滤器的初始化参数。(2)doFilter(ServletRequest,ServletResponse,FilterChain)。这个方法完成实际的过滤操作,当用户请求与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法,在返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过滤器。(3)destroy(

3、)。Servlet容器在销毁过滤器实例前调用该方法,这个方法可以释放过滤器占用的资源。过滤器编写完成后,要在web.xml进行配置,格式如下:过滤器名称过滤器对应的类参数名称参数值下面举例说明在web.xml中配置过滤器与URL关联的方法。(1)与一个URL资源关联:过滤器名xxx.jsp(2)与一个URL目录下的所有资源关联:过滤器名/*(3)与一个Servlet关联:过滤器名Servlet名称3Struts 2工作机制工作机制Struts2的设计思想:用ServletFilter技术将ServletAPI隐藏于框架之内,一个请求在Struts2框架内被处理,大致分为以下几个步骤,如图2.3

4、所示。1加载加载Struts 2包包登录http:/struts.apache.org/,下载Struts2完整版,本书使用的是Struts2.3.4.1。将下载的文件struts-2.3.4.1-all.zip解压缩,得到文件夹包含的目录结构如图2.4所示开发Struts2程序只需用到lib下的9个jar包,包括:(1)传统Struts2的5个基本类库。struts2-core-2.3.4.1.jarxwork-core-2.3.4.1.jarognl-3.0.5.jarcommons-logging-1.1.1.jarfreemarker-2.3.19.jar(2)附加的4个库。commo

5、ns-io-2.0.1.jarcommons-lang3-3.1.jarjavassist-3.11.0.GA.jarcommons-fileupload-1.2.2.jar(3)数据库驱动。mysql-connector-java-5.1.22-bin.jar在项目目录树中,右击项目名,选择菜单【BuildPath】【ConfigureBuildPath】,出现如图2.5所示的窗口。2配置配置Struts 2修改web.xml文件:struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*login.jsp3创建创建JavaB

6、ean在项目src文件夹下建立包org.easybooks.bookstore.jdbc,在包里创建MySQLConnBean类,其代码与“入门实践一”的程序完全一样。4创建创建login.jsp在项目WebRoot下创建登录首页的JSP文件login.jsp,代码如下:登录页面用户登录姓名:密码:5实现控制器实现控制器Action在项目src文件夹下建立包org.easybooks.bookstore.action,在包里创建LoginAction类,代码所示。6配置配置Action在编写好Action(控制器)的代码之后,还需要进行配置才能让Struts2识别这个Action,在src下创

7、建文件struts.xml(注意文件位置和大小写),输入如下的配置代码:/welcome.jsp/error.jsp7创建其余的创建其余的JSP文件文件在项目WebRoot下创建两个JSP文件。(1)welcome.jsp的代码如下:成功页面,您好!欢迎光临叮当书店。(2)error.jsp的代码与“入门实践一”的相同,在此省略。8部署运行部署运行部署项目、启动Tomcat服务器,在浏览器中输入http:/localhost:8080/jsp_struts2_jdbc/并回车,运行效果与之前的程序完全相同。1Struts 2:配置:配置Struts2的配置可以分成单个单独的文件,如图2.6所示

8、。web.xmlweb.xml并不是Struts2框架特有的文件,它作为部署描述文件,是所有JavaWeb应用程序都需要的核心配置文件。struts.properties文件Struts2提供了很多可配置的属性,通过这些属性的设置,可以改变框架的行为,从而满足不同Web应用的需求。这些属性可以在struts.properties文件中进行设置,struts.properties是标准的Java属性文件格式,“”号作为注释符号,文件内容由键(key)-值(value)对组成。struts.xml文件struts.xml是Struts2框架的核心配置文件,主要用于配置和管理开发人员编写的actio

9、n。struts.xml文件通常也放在Web应用程序的src目录下,该目录下的struts.xml将被Struts2框架自动加载。struts.xml文件是一个XML文件,开头是XML的文档类型定义(DTD)。DTD提供了XML文件中各元素应使用结构的信息,而这些最终会被XML解析器或编辑器使用。/welcome.jsp/error.jsp2Struts 2:Action(1)Action的定义。Struts2中的Action只需要在一个普通的类中定义一个方法,如:publicclassXXXActionpublicStringmethod()returnreturnValue;例如,定义一个

10、HelloAction,访问该Action的时候在控制台打印“你好”:publicclassHelloActionpublicStringhello()System.out.println(你好);returnnull;在struts.xml配置文件中,将刚才创建的Action注册到这里:(2)通过Action获取请求参数。以下是一个Action获取请求参数的例子。本示例用于演示用户登录的过程。用户输入用户名和密码,如果分别为admin和admin,则显示登录成功的信息,否则显示登录失败的信息。login.jsp的代码如下:用户名:密码:LoginAction.java作为控制器,负责接收页面

11、发送过来的用户名和密码,并通过execute()方法调用业务方法,根据执行结果控制程序流程:如果登录成功,则跳转到success.jsp,否则跳转到failure.jsp。LoginAction的配置:/success.jsp/failure.jsp(3)ActionSupport。ActionSupport类为Action提供了一些默认实现,主要包括:预定义常量。从资源文件中读取文本资源。接收验证错误信息。验证的默认实现。下面是ActionSupport类所实现的接口:publicclassActionSupportimplementsAction,Validateable,Validati

12、onAware,TextProvider,LocaleProvider,SerializableAction接口同样位于com.opensymphony.xwork2包,定义了一组标准的常量和execute()方法,可提供给开发人员使用,如下所示:publicinterfaceActionpublicstaticfinalStringSUCCESS=success;publicstaticfinalStringNONE=none;publicstaticfinalStringERROR=error;publicstaticfinalStringINPUT=input;publicstaticf

13、inalStringLOGIN=login;publicStringexecute()throwsException;2.2.1 Hibernate概述概述1Hibernate与与ORM用Hibernate将本书test数据库的user表映射为User对象,如图2.7所示,这样在编程时就可直接操作User对象来访问数据库了。2Hibernate体系结构体系结构Hibernate的体系结构如图2.8所示。1为项目添加为项目添加Hibernate能力能力右击项目jsp_hibernate,选择菜单【MyEclipse】【AddHibernateCapabilites】启动向导,首先出现如图2.9所

14、示的窗口。单击【Next】按钮,进入如图2.10所示的界面,用于创建Hibernate配置文件。单击【Next】按钮,进入如图2.11所示的界面,指定Hibernate所用数据库连接的细节。单击【Next】按钮,出现如图2.12所示的窗口,询问是否需要创建SessionFactory类,这里选择创建,类名取默认HibernateSessionFactory,存放于org.easybooks.bookstore.factory包中。单击【Finish】按钮完成添加。通过这些步骤,项目中增加了两个Hibernate包目录、一个hibernate.cfg.xml配置文件、一个HibernateSes

15、sionFactory.java类,另外,数据库的驱动包也被自动载入进来,此时项目的目录树呈现如图2.13所示的状态。2为为user表生成持久化对象表生成持久化对象打开先前创建的mysql数据连接,选中数据库表user,右击,选择菜单【HibernateReverseEngineering】,如图2.14所示。首先,如图2.15所示,选择生成的类及映射文件所在的位置。单击【Next】按钮,进入如图2.16所示的界面,配置映射文件的细节。单击【Next】按钮,进入如图2.17所示的界面,主要用于配置反向工程的细节,这里保持默认配置即可。3创建创建JSP文件文件与第1章“入门实践一”的传统Java

16、EE程序一样,本例有4个JSP文件,其中login.jsp、welcome.jsp和error.jsp这3个文件的源码完全相同,不同的仅仅是validate.jsp文件的代码,改为直接用User对象访问数据库。validate.jsp的代码。4部署运行部署运行修改web.xml文件,改变项目启动页为login.jsp,部署、启动Tomcat服务器。在浏览器中输入http:/localhost:8080/jsp_hibernate/并回车,运行效果与之前的程序完全相同。1Hibernate:配置:配置现在再看刚刚做的项目,在src目录下,生成了hibernate.cfg.xml文件,主要内容。2

17、Hibernate:接口:接口(1)初始化Hibernate配置管理类Configuration。根据传入或者默认的配置文件(hibernate.cfg.xml)来创建并初始化一个Configuration类的实例:Configurationconfig=newConfiguration().configure();(2)通过Configuration类实例创建Session的工厂类SessionFactory:SessionFactorysessionFactory=config.buildSessionFactory();(3)通过SessionFactory得到Session实例:ses

18、sion=sessionFactory.openSession();ConfigurationConfiguration类负责管理Hibernate的配置信息。Hibernate运行时需要一些底层实现的基本信息,包括:(1)数据库URL。(2)数据库用户名。(3)数据库用户密码。(4)数据库JDBC驱动类。(5)数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。SessionFactorySessionFactory负责创建Session实例,可以通过Configuration实例构建SessionF

19、actory。Configurationconfig=newConfiguration().configure();SessionFactorysessionFactory=config.buildSessionFactory();SessionSession实例由SessionFactory构建:Configurationconfig=newConfiguration().configure();SessionFactorysessionFactory=config.buildSessionFactory();Sessionsession=sessionFactory.openSession

20、();之后就可以调用Session提供的save、get、delete等方法完成持久化操作:(1)Save。/新增名为“zhouhejun”的用户记录Useruser=newUser();User.setName(zhouhejun);session.save(user);(2)Get。/假设表user中存在id=1的记录Useruser=(User)session.get(User.class,newInteger(1);(3)Delete。/假设表user中存在id=1的记录Useruser=(User)session.get(User.class,newInteger(1);Sessio

21、n.delete(user);/也可以通过Query接口进行基于HQL的删除操作Stringhql=deleteUserwhereid=1;Queryquery=session.createQuery(hql);Query.executeUpdate();通过Query接口进行数据查询:Stringhql=fromUseruserwhereuser.namelike?;Queryquery=session.createQuery(hql);query.setParamter(0,cartier);Listlist=query.list();Iteratorit=list.iterator();

22、while(it.hasNext()Useruser=(User)it.next();System.out.println(user.getUsername();3Hibernate:ORM基础基础Hibernate中的ORM主要包括3部分内容:(1)表名-类名映射。(2)主键映射。(3)字段映射。本例用的数据库表(user表)结构如图2.18所示。对应user表,映射之后自动生成的User类代码。User.hbm.xml的配置信息如下:/配置文件根节点/类/表名映射/id映射/username属性/字段映射/password属性/字段映射类/表映射配置id映射配置属性/字段映射配置属性/字段

23、映射配置将类属性与表字段相关联,如:在JSP+Hibernate的实践中,利用ORM实现了对数据库表的对象化操作,然而,validate.jsp的代码中仍然存留有操作数据库的动作,如:/查询user表中的记录Stringsql=fromUseruwhereu.username=?andu.password=?;Query query=HibernateSessionFactory.getSession().createQuery(sql);query.setParameter(0,usr);query.setParameter(1,pwd);Listusers=query.list();1添加

24、添加Hibernate及生成及生成POJO类类2定义并实现定义并实现DAO在项目src下创建包org.easybooks.bookstore.dao,右击选择菜单【New】【Interface】,在如图2.19所示的【NewJavaInterface】窗口的Name文本框输入IUserDAO,单击【Finish】按钮,创建一个DAO接口。在IUserDAO.java中定义DAO接口如下:packageorg.easybooks.bookstore.dao;importorg.easybooks.bookstore.vo.User;publicinterfaceIUserDAOpublicUse

25、rvalidateUser(Stringusername,Stringpassword);在src下创建org.easybooks.bookstore.dao.impl包,在包中创建类UserDAO,此类实现了接口中的validateUser()方法。3创建创建JSPvalidate.jsp文件的代码。4部署运行部署运行修改web.xml文件,改变项目启动页为login.jsp,部署、启动Tomcat服务器。在浏览器中输入http:/localhost:8080/jsp_dao_hibernate/并回车,运行效果与之前的程序完全相同。1DAO模式模式DAO是DataAccessObject数

26、据访问对象(接口),它介于数据库资源和业务逻辑之间,其意图是将底层数据访问操作与高层业务逻辑完全分开。DAO原理2Hibernate:HQL检索语言检索语言(1)实体查询。有关实体查询技术,如下面的例子所示:Stringhql=fromUser;Queryquery=session.createQuery(hql);Listlist=query.list();如果需要取出名为“zhouhejun”的用户记录,可以通过hql语句加以限定:Stringhql=fromUserasuserwhereuser.name=zhouhejun;Queryquery=session.createQuery(

27、hql);ListuserList=query.list();下面是几个简单的示例:fromUseruserwhereuser.age20fromUseruserwhereuser.agebetween20and30fromUseruserwhereuser.agein(18,28)fromUseruserwhereuser.nameisnullfromUseruserwhereuser.namelikeZ%与SQL相同,通过and、or等逻辑连接符组合各个表达式:fromUseruserwhere(user.age20)and(user.namelikeZ%)(2)批量更新和删除。在Hibe

28、rnate2之前的版本中,HQL还仅限于数据查询,从Hibernate3开始,HQL具备了更加强大的功能,批量更新与删除就是其中的主要特性。在Hibernate2中,完成用户年龄属性的更新,必须通过以下代码:/加载ID=1的用户记录Useruser=(User)session.get(User.class,newInteger(1);user.setAge(newInteger(18);/通过session.save方法保存session.save(user);Hibernate3的HQL提供了更加灵活的实现方式(bulkdelete/update):Stringhql=updateUsers

29、etage=18whereid=1;Queryquery=session.createQuery(hql);query.executeUpdate();以下代码可将所有用户的年龄属性都更新为18:Stringhql=updateUsersetage=18;Queryquery=session.createQuery(hql);intret=query.executeUpdate();delete子句的使用同样非常简单。以下代码删除了所有年龄大于18的用户记录:Stringhql=deleteUserwhereage18;Queryquery=session.createQuery(hql);i

30、ntret=query.executeUpdate();3Hibernate:Query接口接口(1)使用“?”指定参数。通过Query接口可以先设定查询参数,然后通过setXXX()等方法,将指定的参数值填入,而不用每次都编写完整的HQL。Queryquery=session.createQuery(fromStudentswheres.age?ands.namelike?)query.setInteger(0,25);/设置s.age?中的问号为整型25query.setString(1,%clus%);/设置s.namelike?中的问号为字符串“%clus%”(2)使用“:”后跟变量的

31、方法设置参数。可以使用命名参数来取代使用“?”设置参数的方法,这可以不用依据特定的顺序来设定参数值,比如上面的代码可以写为:Queryquery=session.createQuery(fromStudentswheres.age:minAgeands.namelike:likeName);query.setInteger(minAge,25); /设置:号后的minAge变量值query.setStringString(likeName,%clus%);/设置:号后的likeName变量值(3)setParameter()方法。setParameter()方法的全称是setParameter

32、(StringparamName,实例,实例类型),它可以绑定任意类型的参数。在实际应用中,Hibernate能够根据类实例推断出绝大部分对应的映射类型,因此setParameter()中的第3个参数可以不要。例子如下:Stringhql=fromUseruwhereu.username=?andu.password=?;Queryquery=session.createQuery(hql);query.setParameter(0,username);query.setParameter(1,password);(4)list()方法。Query的list()方法用于取得一个List类的实例

33、,此实例中包括的可能是一个Object集合,也可能是Object数组集合。最常见的是使用list()取得一组符合条件的实例对象,如以下的程序:Queryquery=session.createQuery(fromStudentswheres.age20);Listlist=query.list();for(inti=0;ilist.size();i+)Studentstu=(Student)list.get(i);System.out.println(stu.getName();2.3.1 MVC思想思想一个典型的MVC系统各部分的构成及相互作用关系如图2.21所示 模型模型:数据模型(Mod

34、el)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。视图视图:视图(View)是用户看到并与之交互的界面。控制器控制器:控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。1M层开发层开发添加添加Hibernate、生成、生成POJO类及编写类及编写DAO(1)添加Hibernate。操作方法同“入门实践三”第1步,在此不再赘述。(2)生成POJO类。操作方法同“入门实践三”第2步,在此不再赘述。(3)在项目src下创建包org.easybooks.bookstore.dao和org.easybooks.bookstore.dao.impl,分别用于存

35、放DAO接口IUserDAO及其实现类UserDAO。DAO接口和类的代码与“入门实践四”的完全相同,在此省略。2C层开发层开发加载加载Struts 2包、实现包、实现Action及控制器配置及控制器配置(1)加载、配置Struts2。步骤与“入门实践二”第1、2步相同,稍有差别的是,这里仅需加载Struts2的9个jar包即可,因在第1步添加Hibernate时,数据库的驱动包已被自动载入进来,无须重复加载。(2)实现Action。在项目src文件夹下建立包org.easybooks.bookstore.action,在包里创建LoginAction类,代码所示。(3)配置Action。在s

36、rc下创建文件struts.xml,配置内容与“入门实践二”完全一样,在此省略。3V层开发层开发编写编写JSP文件文件有了M、C这两层的功能,V层开发的任务就简单多了,只剩下编写3个JSP文件:login.jsp、welcome.jsp和error.jsp。它们的代码与“入门实践二”的也完全一样,在此省略。4部署运行部署运行修改web.xml文件,改变项目启动页为login.jsp,部署、启动Tomcat服务器。在浏览器中输入http:/localhost:8080/jsp_struts2_dao_hibernate/并回车,运行效果与之前的程序完全相同。下面具体介绍如何将username和p

37、assword封装到User类中。User.java代码如下:publicclassUserprivateStringusername;privateStringpassword;publicvoidsetPassword(Stringpassword)this.password=password;publicStringgetPassword()returnpassword;publicvoidsetUsername(Stringusername)this.username=username;publicStringgetUsername()returnusername;于是得到LoginAction.java的修改版,代码如下:publicclassLoginActionprivateUseruser;publicvoidsetUser(Useruser)this.user=user;publicUsergetUser()returnuser;publicStringexecute()/同上对应login.jsp的修改版,代码如下:用户登录姓名:密码:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号