开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc

上传人:椰子壳 文档编号:5022345 上传时间:2020-01-29 格式:DOC 页数:32 大小:273KB
返回 下载 相关 举报
开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc_第1页
第1页 / 共32页
开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc_第2页
第2页 / 共32页
开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc_第3页
第3页 / 共32页
开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc_第4页
第4页 / 共32页
开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc》由会员分享,可在线阅读,更多相关《开发基于Struts_Hibernate_Spring__Ajax的网上信息发布平台.doc(32页珍藏版)》请在三一文库上搜索。

1、开发基于Struts Hibernate Ajax的网上信息发布平台第一章 框架技术概念 1 主流技术框架 (1)Struts框架 Struts是MVC设计模式的一个优秀实现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Modle(模型)和View(视图),以Action的概念对用户请求做了封装,是代码更清晰易读。(2)Hibernate框架 Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库或从数据库中读取数据并封装到对象的工作。(3)Spring框架 Spring主要作为依赖注入容器和Aop的实

2、现存在。还提供了声明式事务,对DAO层的支持等简化开发的功能。Spring还很方便的与Struts,Hibernate等技术集成(4)DWR框架 DWR是一个Ajax框架,使Ajax开发更加轻松。Ajax是一种通过JavaScript代码异步请求服务器资源的技术,可以在不刷新当前页面的情况下取得服务器端的最新数据并更新页面显示。2三层结构层Java中的命名规则。Net中的命名规则表示层表示层包括Jsp页面和对应的后台Servlet(或Struts的Action Bean和Form Bean代码)放在web包下业务逻辑层放在biz包下,类名(或接口名)后缀为Biz.biz是business的简写

3、,意思是“业务逻辑”命名空间后缀BLL数据访问层放在dao包下,类名(或接口名)后缀为DAO.dao是Data Acess Object 的简写,意思是“数据库访问”命名空间后缀DAL实体对象放在entity包下命名空间后缀Models第二章 Struts原理(一) 1 什么是Struts Strut是骨架,支柱的意思。Struts框架的目的也是提供一个现实MVC模式的应用程序骨架。基于Struts开发的应用程序由3类组件构成:控制器组件,模型组件和视图组件。控制器组件包括ActionServlet,是Struts的控制器,还包括自定义的Action类(比如AddAction),代表客户的一个

4、操作(比如登陆或注册),自定义的Action类继承自Struts提供的org.apache.struts.action.Action。模型组件并不有Struts提供,一般有普通的接口和JavaBean充当,需要我们自己编码实现。比如上一章的Calculator类,UserBiz接口和UserBizImpl类。视图组件一般有JSP实现,还包括自定义的ActionForm类(比如AddForm)和Struts标签。自定义的ActionForm类用于封装request中的数据,Struts可以将request中的数据自动填充到ActionForm类中,以避免繁琐的request.getParamte

5、r()和类型转化代码。自定义的ActionForm类继承自Struts提供的org.apache.struts.action.ActionForm。Struts提供了一系列自定义标签以简化页面的编码。ActionServlet在系统启动的时候加载struts-config.xml配置文件。struts-config.xml配置文件中包含Action,ActionForm,页面转发等相关的配置。 2 如何使用Struts (1)添加Struts库文件和自定义标签添加到项目。Struts库文件可以从http:/archive.apache.org/dist/struts/binaries/下载,下

6、载后解压缩,在lib目录下得到库文件。将Jar文件复制到项目的“/WEB-INF/lib”文件夹下,将其他文件复制到“/WEB-INF”文件夹下。然后在“/WEB-INF”下创建struts-config.xml配置文件,代码如下: ActionForm的配置比较简单,只需要指定name和type属性。Action配置属性较多,具体如下:name属性指定关联的ActionForm的name.path属性指定访问这个Action的路径,以“/”开头,注意不需要加“.do”.type属性指定这个ActionBean的类名。Scope属性定义这个Action对应的ActionForm的作用域。这个属

7、性可以配置为request或session。节点下的子节点定义了该Action可能转发的页面,对应一个页面有一个逻辑名,在Action代码中,我们指通过这个逻辑名引用将要转发的页面,Struts不允许在Action中引用页面的物理名。通过这种方式,在编写Action代码时,视图组件被抽象话了。我们甚至可以仅仅通过修改配置文件就将整个站点在不同试图间切换,而不需要任何程序代码。这就是Struts的设计目标和强大威力。最后,在web.xml正确的配置ActionServlet action org.apache.struts.action.ActionServlet config /WEB-INF

8、/struts-config.xml debug 3 detail 3 0 action *.do index.jsp 在配置ActionServlet时,配置文件的路径名是可以配置的,而且Struts支持多个配置文件。比如可以进行如下配置。 config /WEB-INF/struts-config.xml /WEB-INF/struts-config1.xml 配置访问路径使用了通配符“*”,表示以“.do”结尾的请求都有Struts处理,也经常被配制成“/action/*”或“*.action”. (2)实现加法器 首先创建AddForm,继承自org.apache.struts.act

9、ion.ActionForm.AddForm等继承自org.apache.struts.action.ActionForm,用来封装页面输入的类统称FormBean.import org.apache.struts.action.ActionForm;public class AddForm extends ActionForm/属性private double num1;private double num2;public double getNum1() return num1;public void setNum1(double num1) this.num1 = num1;public

10、 double getNum2() return num2;public void setNum2(double num2) this.num2 = num2;public AddForm()System.out.println(创建AddForm);ActionForm中属性名与页面输入空间的name属性要一致,以便表单提交的时候Struts可以将页面输入自动封装到ActionForm中。然后创建AddAction,继承自org.apache.struts.action.Action。每个自定义的Action表示一个用户操作。import javax.servlet.http.HttpSer

11、vletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.Action;public class AddAction extends Action /业务逻辑对象private Calculator calc

12、ulator=new Calculator();public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)ActionForward af=null;/获取表单参数AddForm addForm =(AddForm) form;/调用业务逻辑方法double resultData=calculator.add(addForm.getNum1(), addForm.getNum2();/将数据保存到reques

13、t中request.setAttribute(resultData,resultData);/将请求转发逻辑名为result 页面af=mapping.findForward(result); return af;每个Action中都必须实现一个execute方法。Request参数是客户请求对象,response参数是响应对象,form参数中封装了页面传入的数据,mapping参数封装了页面转发的配置信息,方法返回类型为ActionForward,表示执行完操作后将要转发的JSP页面。注意页面form的Acton属性仍然是add.do,显示结果使用的是$requestScope.result

14、.addForm被保存在request对象的Attribute属性中,key值为“addForm”,获得操作数的el表达式为$requestScope.addForm.result.如果配置文件中的scope属性为session,则获得操作数的el表达式为$sessionScope.addForm.result.3 Struts核心组件和运行过程,Struts处理请求的过程如下:(1)当客户端浏览器发起请求到ActionServlet时,ActionServlet说先对请求进行以系列处理:根据请求的路径和配置信息找到相应的Action Bean和Form Bean,比如前面的加法的例子,当提交

15、表单发送http:/localhost:8080/zf2/add.do请求到服务器的时候,ActionServlet就会根据Struts配置信息查找path属性为/add的Action Bean,于是找到AddAction;并得到该Action的name属性为“addForm”,于是找到AddForm的实例。(2)在确定将要调用的Action Bean和对应的Form Bean后,就将请求中包含的值填充到Form Bean中。在调用Action的execute方法前,ActionServlet还要准备好ActionMapping参数,ActionMapping中包含了该Action的配置信息。

16、(3)然后Sturts将请求分发至相应的Action Bean处理,ActionMapping参数,ActionForm参数,request和response都作为参数传递给处理请求的Action Bean的execute方法。(4)Action调用业务逻辑方法,得到返回值,并返回ActionForward对象。(5)控制权从新回到ActionServlet, ActionServlet根据Action返回的ActionForward对象转发相应的JSP页面(6)处理结果返回给浏览器。(7)需要注意的三点如下:ActionServlet将控制权转到页面的时候采用的是转发的方式(request.

17、getRequestDispatcher(url).forward(request,response);),所以转发页面的request和Action方法参数中的request是同一个请求,数据可以通过request对象的Attribute属性传递。ActionForm根据对应Action的Scope属性配置不同的生命周期。一般情况下,scope属性设置为request,则每次请求开始时ActionServlet创建新的ActionForm对象,保存在request对象的attribute属性中。所以可以在Action代码中设置ActionForm的值,在页面中取出。当需要采取重定向的方式转到

18、新的页面的时候,可以在Action代码中使用“response.sendRedirect(url);”语句,并返回null.第三章 Struts原理(二) 1 DispatchAction 通常,一个Action中只能完成一种业务操作,通过扩展org.apache.struts.actions. DispatchAction实现的Action类可以完成一组相关的几种业务操作。扩展自DispatchAction的Action类中不必定义execute方法,而是创建一些现实实际业务操作的方法,如doAdd(),dosubtar()等,但这些业务逻辑方法传入的参数要和普通的execute方法相同。与

19、普通的Action配置文件基本一致,只是多了一个parameter属性。这个属性告诉Struts请求对象中找到名称为operate的参数值,参数值是什么就到CalcAction中执行同名的方法。 2 Struts错误处理机制 (1)编辑属性文件 在使用MyEclipse工具给项目增加Strut支持时,将自动添加一个名称为ApplicationResources.properties资源文件到项目中,并在struts-config.xml中配置了对这个属性文件的引用, 为了支持国际化,Struts的报错信息通过先在资源文件中定义然后再引用的方式实现。errors.header=errors.fo

20、oter=error.validate.number=Divisor cannot be 0.Errors.head和errors.footer是Struts要求的。在页面显示错误信息 的时候,将显示在错误页面信息的前后,如实例中error.validate.number错误信息将显示为: Divisor cannot be 0. .我们还需要中文的配置文件:errors.header=alert(errors.footer=);error.validate.number=u9664u6570u4E0Du80FDu4E3A0u3002(2)修改对应的Action代码public ActionF

21、orward doDivide(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)CalcForm calcForm =(CalcForm) form; /输入合法性验证ActionMessages errors = new ActionMessages();if(calcForm.getNum2()=0)errors.add(error2, new ActionMessage(error.validate.number);/errors.add(Actio

22、nMessages.GLOBAL_MESSAGE, new ActionMessage(error.validate.number);if(!errors.isEmpty()super.saveErrors(request, errors);return mapping.findForward(add);double resultData=biz.divide(calcForm.getNum1(), calcForm.getNum2();request.setAttribute(resultData,resultData);return mapping.findForward(result);

23、首先定义ActionMessages类型的变量errors用于保存出错信息。然后根据业务逻辑进行判断,对出错的情况添加出错信息到errors中。语法如下:errors.add(error2, new ActionMessage(error.validate.number);error.validate.number对应资源文件中的属性名称。Error2是出错信息名,在页面显示错误时可以根据名称来引用错误信息。对同一个名称,可以添加多个出错信息。如果不是需要单独指定错误信息,在页面统一显示错误信息即可,则可以错误信息添加到ActionMessages.GLOBAL_MESSAGE名下,代码如er

24、rors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(error.validate.number); 最后,判断errors中是否有错误信息,如果有,则使用savaErrors方法保存错误信息到request对象中,并转发到页面。(3)在页面上显示报错信息 我们使用Struts标签来显示错误信息,首先要在首页声明标签:.标签通过property属性制定引用的错误信息名,并且将资源文件中Errors.head和errors.footer自动添加在错误信息的前后。可以通过Errors.head和errors.footer实现弹出JavaS

25、cript窗口提示错误信息。只要我们设置如下两个属性即可:errors.header=alert(errors.footer=);3 简化Struts开发 使用实体对象作为Form属性简化开发。第四章 Struts标签库1 使用html标签“绑定”数据(1)引入Struts标签(2)使用html标签进行页面编码 查询 首先使用html:form替换普通的form标签。action属性和配置文件中的Action Bean的path属性一致即可。http:hidden标签用于生成代码。重点是html:text标签,可以通过property属性和Form Bean中的值绑定,最终发送到浏览器的HTM

26、L代码为“”.html:submit标签用于生成提交按钮。 html:optionsCollection标签name属性表明,依次在page,request,session或application的范围查找名称为“qxList”的属性(attribute)值。Lable和value属性表明对应查找的集合数据的每个元素的属性,哪个用作候选项的字面显示,那个用作候选相的值。Qx和qxid都是QX实体对象的属性名。2 logic标签(1)使用logic标签实现逻辑判断 使用logic:notEmpty判断Bean值是否存在或为非空 /显示内容 Name属性指定了使用什么名称去查找值。Property

27、属性指定取找到的Bean的哪个属性值。Scope指定查找的范围。 使用logic:equal判断Bean值是否相等 编辑删除 logic:equal标签用name和property属性取得自身的值,然后和value属性指定的值进行比较。Value属性可以是常量,可以是Jsp表达式,也可以是EL表达式。类似的还有logic:notEqual标签,用法和logic:equal类似(2)使用logic:interate显示列表数据 Name属性和前面的类似用于取得标签的值。Id属性和才c:forEach的var属性类似,有两个作用:一是定义名称为“fwxx”的Bean,值为每次循环到的,集合中的一个

28、元素的值,所以在标签内可以已通过$fwxx.title进行输出;二是定义名称为fwxx的页面脚本变量,所以可以在标签内通过显示数据。一般只有Struts bean标签才有id属性,logic:interate是一个例外。3 bean标签(1)使用bean:write格式化输出 bean:write属性用于将Bean的值输出到页面。同前面一样,bean:write标签通过name和property属性取得值。然后,可以通过format属性设置输出格式,支持对数字和日期的格式化。(2)使用bean:define定义页面变量 共找到条记录Name和scope属性用于取得标签的值,bean:defin

29、e标签用于定义脚本变量和新的Bean.id和type用于指定新变量和bean的名称和类型。可以看到bean:define标签不输出任何内容。(3)使用bean:size得到集合 共找到$count条记录 bean:size标签可以直接取得集合数据的记录数。与bean:define标签相同,它也不输出任何内容,只取的值,并重新定义,方便其他标签或EL表达式引用。最终采用EL或bean:write表达式输出第五章 使用Hibernate完成对象持久化 1 持久化持久化是将程序中数据在瞬间状态和持久状态间转化的机制。2 使用Hibernate的基本步骤(1)添加Hibernate3.1架包(2)Hi

30、bernate配置文件 在添加Hibernate支持的时候会自动添加Hibernate配置文件。在配置文件中我们需要配置数据库连接信息和Hibernate的参数,hibernate.cfg.xml如下:hafeijdbc:sqlserver:/localhost:1433;DatabaseName=e_paiorg.hibernate.dialect.SQLServerDialectepai513810com.microsoft.sqlserver.jdbc.SQLServerDrivertrue其中,dialect参数是必须配置的,用于配置Hibernate使用的不同数据库类型。Hibern

31、ate几乎支持所有的主流数据库,包括Oracle,DB2,MS SQL Server,MySQL等。Show_sql参数为true,则程序运行时在控制台输出SQL语句。数据库表和实体的映射信息在另外的映射文件中定义,但需要在配置文件中声明,具体如下:(3)实体类和映射文件 我们要使用Hibernate实现添加用户的功能,首先要定义用户实体类,把之前的实体类做两个修改就可以了:实现implements java.io.Serializable接口;添加默认构造方法然后还需要告诉Hibernate实体类User映射到数据库哪个表,以及哪个属性对应到数据库的哪个字段,这些在配置文件中配置,Users

32、.hbm.xml3 使用Hibernate实现用户添加Hibernate执行持久化的操作的步骤步骤操作代码与JDBC类比1读取并解析配置文件Configuration conf=new Configuration().configure();相当于使用DataSource获取连接前读取DataSoure的配置文件2读取并解析信息,创建SessionFactorySessionFactory sf=conf.buildSessionFactory();相当于创建DataSource对象3打开sessionSession session=sf.openSession();相当于JDBC连接4打开一

33、个事务(增删改操作,查询可选)tx=session.beginTransaction();开始事务5持久化操作session.save(user);持久化操作6提交事务mit();提交事务7关闭sessionSession.close();关闭连接4 使用工具简化Hibernate开发5在项目中使用Hibernate(公用类)import java.util.List;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.Example;public abstract class BaseHibernateDAO private Session session = null;protected Object get(Class clz,java.io.Se

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

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1