Struts、Hibernate简明教程1

本文深入介绍了Struts框架的基本概念、工作原理及组成部分,包括ActionFormBean和ActionBean的角色与配置,以及Struts提供的标签库使用方法。

Struts

1 Struts 简介:

         MVC(模型-视图-控制器)模式的最主要思想:实现业务代码与视图代码分离。从而达到能有效地理清系统结构,降低系统复杂度与维护难度的目的。

Struts Apache的一个开源项目,它是以Java Servlet/JavaServerPages技术,开发Web应用程序的开放源码的framework

         Struts 就是基于J2EE web 形式 MVC 模式实现!目的是为了减少在运用MVC设计模型来开发Web应用的时间。Struts已逐步越来越多运用于商业软件,是一种非常优秀的J2EE MVC实现方式。

         Struts的优点主要集中体现在两个方面:Taglib和页面导航。

TaglibStruts的标记库,通过对标签库的灵活运用,和自定义标签,能大大提高开发效率。

页面导航,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着很大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

2 Struts的工作原理:

通过上图大家可以看到有一个XML文件Struts-config.xml,与之相关联的是ControllerStruts中,承担MVCController角色的是一个Servlet,叫ActionServletActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到StrutsHTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean,并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。

视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: HtmlBeanLogic等,这有利于分开表现逻辑和程序逻辑。

模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action FormActionJavaBean or EJBAction Form通常也称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java BeanEJB等。

流程:Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevletActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。

3 ActionForm bean介绍:

3.1 ActionForm Bean的特征:

         它是实现了 ActionForm 接口的类。

         ActionForm 接口本身不需要特殊的实现方法。它是用来标识这些特定的beans在整个体系结构中的作用。

一个ActionForm bean只包括属性的get方法和set方法,没有商业逻辑。

在创建一个ActionForm Bean时,我们为每个表单中出现的每一个字段定义一个属性(用相关的getXxx()setXxx()方法)。字段名和属性名必须按照JavaBeans的约定相匹配。例如,一个名为 username 的输入字段将引起 setUsername() 方法被调用。

         通常在一个ActionForm bean中有很少的输入验证逻辑。但beans存在的主要理由是保存用户为相关的表单所输入的值,在错误被检测到时,重建同样的页面,伴随有一组出错信息,这样用户仅仅需要纠正错误的字段。用户输入的验证应该在 Action 类中执行(如果是很简单的话),或者在适当的商业逻辑beans中执行。

3.2controller servlet对ActionForm bean的调用过程:

用户提交页面请求,Struts框架为请求的输入创建了一个 ActionForm bean的实例。controller servlet组件调用相应的set方法设置ActionFrom bean的状态,ActionFromStrutscontroller servlet调用适当的 Action 方法前自动执行。

更新的ActionForm bean在被调用时将被传递给Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java BeanEJB等。

ActionForm Bean中的验证:(一般我们在validate方法中验证字段级错误,而逻辑错误我们一般交由Action beanjava bean 来处理,跳转至errors页面显示错误信息)

public ActionErrors validate(ActionMapping mapping

, HttpServletRequest request){

ActionErrors errors = new ActionErrors();

if(getZoneno()==null||"".equals(getZoneno())){

errors.add("testform.err.zoneno",new ActionMessage("form.addZone.err.zoneno"));

}

if(getZonename()==null||"".equals(getZonename())){

errors.add("testform.err.zoneno",new ActionMessage("form.addZone.err.zoneno "));

}

return errors;

}

public void reset(ActionMapping mapping, HttpServletRequest request) {

this.zoneno=null;

this.zonename=null;

}

3.3 actionForm的配置:

<form-beans>
   

    <form-bean name="testForm" type="com.form.TestForm" />

</form-beans>

注:一个“表单”并不必须对应于用户界面中的一个单独的JSP页面。在很多应用程序中一个“表单”可以对应多个页面。但Struts更鼓励定义一个包含所有字段属性的单独的ActionForm bean。同样,这样的表单可以提交到相同的Action类。这样的好处是,页面设计者可以重新组织不同页面中的字段而不需要改变处理逻辑。但为了程序的清晰和维护,我们不这样做。

3.4 动态actionForm:

         actionForm支持在struts-config.xml文件中完成全部的配置,而可以不通过具体程序实现actionFrom bean。这样的好处是如果页面表单发生改变时就不必重写actionForm bean了,只需更改struts-config.xml配置即可。

如:

<form-beans>
   

<form-bean name="testForm" type="com.form.TestForm" >

      <form-property name=”zoneno” type=”java.long.String”/>

<form-property name=”zonename” type=”java.long.String”/>

</form-bean>

</form-beans>

访问动态actionForm的属性:

String zoneno=(String)form.get(“zoneno”);

form.set(“zoneno”,”00400”);

4 Action Bean介绍:

4.1 Action bean的特征:

         Action 接口的实现。

         实现了Action接口的execute方法。

controller servlet仅仅会创建一个Action 类的实例,用于所有的请求。

 

         Action bean的作用是处理请求,然后返回一个标识JSP页面的 ActionForward 对象,控制应该重定向这个JSP页面以生成相应的响应。

 

         注:由于controller servlet仅仅会创建一个Action 类的实例,用于所有的请求。这样你需要编写你的 Action 类使其能够在一个多线程环境中正确地安全的运行,最重要的原则就是在你的 Action 类中仅仅使用局部变量而不是实例变量。

为了防止出现非常复杂的 Action 类。我们要把业务逻辑写在业务逻辑beans中。如果我们把业务逻辑代码写在Action的后果是除了使 Action 类难于理解和维护外,也使得难于重用这些业务逻辑代码,还有一个很重要的原因就是controller servlet仅仅会创建一个Action 类的实例,用于所有的请求。我们应该被看作是应用程序设计中的一个bug,而不是一个Struts体系结构中的固有特性。

4.2 处理请求的execute方法:

public ActionForward execute(ActionMapping mapping, ActionForm form,

                 HttpServletRequest request, HttpServletResponse response) {

                 testForm zoneForm = (testForm) form;

                 zoneOperate zoneOp = new zoneOperate ();

                 ZoneTbl zonetbl = new ZoneTbl();

                 zonetbl.setZoneno(zoneForm.getZoneno());

                 zonetbl.setZoneName(zoneForm.getZonename());

                 try{

                      zoneOp.add(zonetbl);

                 }catch(Exception e){

                      System.out.print(e.toString());

                 }

                 return mapping.findForward("success");

      }

4.3 action的配置:

<action-mappings >

    <action

      attribute="testForm"

      name="testForm"

      path="/addZone"

      scope="request"

      type="com.action.testAction">

<forward name="success" path="/successs.jsp" />

<forward name="errors" path="/ errors.jsp" />

    </action>

  </action-mappings>

 

5 struts标签库介绍

5.1 struts html标签库

      5.1.1 用于生成基本的HTML元素的标签

              <html:html>

              <html:base>

      5.1.2基本表单标签

             

              <html:optionsCollection/>

      5.1.3上传文件标签

              <html:file/>

      5.1.4 errors标签

              <html:errors> 输出错误消息

                     <html:errors property=” ActionMessages对象在requestsession中的key” bundle=” 指定struts-config.xml中配置的message-resourceskey值,如果此值不设,将从默认的message-resources中取值 ” />如果设置了property参数设置为org.apache.struts.action.GLOBAL_MESSAGE,那么将显示全局错误信息(不与特定字段相关联的错误信息)

      5.1.5 messages标签

              <html:messages>在网页上输出信息

                     <html:messages id=”命名从requstsession中取出的ActionMessages对象” message=”true”>

                            <bean:write name=”html:message标签的id”/>

                     </html:messages>

 

 

                     <html:messages name=” ActionMessages对象在requestsession中的key” message=”false”/>

                     <html:messages message=”false”/>

此时name属性为默认值Globas.MESSAGE_KEY

 

5.1.6 注:ActionMessages及其子类ActionErrors对象:

struts用来保存提示信息的类,ActionFormAction中都可以得到

       ActionFormvalidate中的用法:

              ActionErrors errors=new ActionErrors();

              errors.add(“zonenoError”,new  ActionMessages(“显示信息资源文件中错误信息的key”));

              errors.add(ActionMessages.GLOBAL_MESSAGE,new  ActionMessages(“信息资源文件中错误信息的key”));

              return errors;

       Actionexecute中的用法:

              ActionMessages errors=new ActionMessages();

              String errorzoneno=((testForm)form).getZoneno();

              errors.add(“zonenoError”,new ActionMessages(“信息资源文件中错误信息的key”,errorzoneno));

              SaveErrors(request,errors);//Action的方法,ActionMessages保存在request

              Return     Mapping.findForward(“errors”);

5.2 struts bean标签库

      5.2.1 访问http请求信息或jsp隐含对象标签

              <bean:cookie>访问cookie

<bean:header>访问HTTP请求的header信息

<bean:parameter>访问请求参数

<bean:page>访问JSP隐式队象

      5.2.2访问web应用资源

              <bean:message>显示resoursce bundle中的信息

                     例:request.setattribute(“stringName”,”string”);

                     <bean:message bundle=”special” name=” stringName” />

                     request.setattribute(“beanName”,bean);

                     <bean:message bundle=”special” name=” beanName” property=”属性名”/>

                     如果标签没有设置bundle参数:

                            <bean:message>标签显示resource bundle中的信息

                            假设struts-config.xml中配置了:

                                   <message-resources parameter=”ApplicationResource”/>

页面中<bean:message key=”test”/>的位置将会显示信息资源文件中key值为test的值

              <bean:resource>检索web资源中的内容

              <bean:struts>访问struts内置配置对象如ActionFormBeanActionForwardActionMapping

              <bean:include>包含一个web资源

      5.2.3定义或输出javabean标签

              <bean:difine>定义一个变量

              <bean:write>显示javabean或其属性内容

              <bean:size>获得mapcollection集合的长度

5.3 struts Logic标签库

       logic-逻辑;

      5.3.1进行比较运算的的logic标签

              <logic:equal>

<logic:notequal>

<logic:greaterequal>

<logic:greaterthen>

<logic:lessthen>

<logic:lessequal>

      5.3.2进行字符串匹配的logic标签

              <logic:match>

              <logic:notmatch>

      5.3.3判断指定内容是否存在的logic标签

              <logic:empty>

              <logic:notempty>

              <logic:present>

              <logic:notpresent>

              <logic:messagepresent>

              <logic:messagenotpresent>

      5.3.4进行循环遍历的logic标签

              <logic:iterate>他可以循环遍历数组、collectionIteratorMap

      5.3.5进行请求转发或重定向的logic标签

              <logic:forward>进行请求转发

                     对应struts配置文件中的<globas-forwards>forward元素

                     如:

                     <globas-forwards>

                            <forward name=”test” path=”/myJsp.jsp”/>

                     </globas-forwards>

                     那么页面中<logic:forward name=test/>

              <logic:redirect>进行请求重定向

                     <logic:redirect name=http://www.xxx.com/>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值