正文

strutsNotes(2)2008-04-01 20:14:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ghlat520/33787.html

分享到:

第二章:深入struts配置文件         在这一章里,我们要学习以下几点内容          1:配置ActionSerlvet拦截用户请求          2:ActionForm的创建与配置          3:Action的创建与配置          4:Forward的定义转向配置          5)Action的excute方法                                  配置ActionSerlvet拦截用户请求 1:ActionSerlvet是核心控制器,是由struts框架自动产生的,它像过滤器一样会拦截所有用户的请求。但是这个过滤器必须要在web.xml文件中进行配置才能够发挥它的作用。幸运的是这些配置struts已经帮我们自动配置好,但是有必要进行了解.   <servlet-name>action</servlet-name> --ActionServlet的名字对应实例对应的类    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>       ........     <servlet-mapping>    <servlet-name>action</servlet-name>    <url-pattern>*.do</url-pattern> --定义ActionServlet过滤的通配符。必须要以do结尾。当然可以修改  </servlet-mapping>                         配置ActionForm接受用户输入的数据  1)ActionForm实际上就是一个非常简单的javaBean。在它里面有许多的get,set方法,它的目的就是为了封装     从用户输入的数据。因此ActionForm通常与表单页面对应,每个表单对应一个ActionForm。表单中的输入      项对应ActionForm的一个属性.  2)Struts要求ActionForm必须要继承自org.apache.struts.action.ActionForm基类。  3)必须保证ActionForm中的属性名一定要与表单中元素名一致  4)所有的ActionForm必须要在Struts-config.xml中进行配置。配置节如下:      <form-beans>  <form-bean name="loginActionForm" type="org.chen.struts.loginForm" />                <form-bean name="shopActionForm"  type="org.chen.struts.loginForm" />                 ........                <form-bean name="shopActionForm"  type="org.chen.struts.loginForm" /> </form-beans>  5)一个ActionForm必须至少指定两项。     name:该项用于标识ActionForm的Id,以便于传递给Action进行使用     type:ActionForm的实现类  6)在eclipse中添加一个ActionForm的步骤如下:      A:右击--->new--->other--->myeclipse--->webstruts-->struts1.2 form      B:在弹出的对话框中         name中输入ActionForm的标识id         superclass:指定ActionForm的父类名。一般选择org.apache.struts.action.ActionForm         formtype:指定ActionForm的类名,因为它是一个javaBean。相当于为类取一个名字         formProperty选项卡中输入ActionForm的属性。                          Action的创建与配置  1)Action是系统的业务控制器,它用于接收从ActionServlet转发过来的请求,并触发execute方法,我们可以    在execute方法里面调用模型进行数据处理  2)struts要求Action必须继承自org.apache.struts.action.Action基类  3)所有的Action必须要在struts-config.xml中进行配置。配置节如下:         <action   name="loginActionForm"   path="/loginAction" scope="request"   type="org.chen.struts.loginAction">   <forward name="scuess" path="/scuess.jsp" />   <forward name="error" path="/error.jsp" />        </action>     说明:         A)name:并不是Action本身的名字,而是与之关联的ActionForm的名称         B)path:非常重要的属性。ActionSerlvet将用户的请求转发与之同名的Action.同名的意思是将请求           的".do"后缀去掉。匹配Action的path属性值          C)struts-config.xml中只要遇到path属性都要加"/"表示相当于WebRoot根目录而言         D)type:Action的类名         E)forward:将Action的转发映射到实际的jsp页面,在实际编程时应该用逻辑名进行转发          F)一个Action可以有ActionForm,也可以没有ActionForm。如果是post提交的一般会有ActionForm           比如:<form id="frm1" action="loginAction.do">,如果是通过get提交则不会有ActionForm,但           是Action总是会有的,因为要处理业务逻辑。比如:<a href="shopAddAction.do">         E)关于超链接与Action路径的问题(******************)             [1]对于表单中的Action而言,不存在路径问题,只要Action在classes下都可以定位              比如:                1.jsp页面在WebRoot下面,但Action在ht.netBook.Action下面。在表单中提交时                         <html:form action="insertTalkAction.do">可以直接指定Action名就可了                或者2.jsp页面在WebRoot下面的page下面。都可以正确定位             [2]但对于超链接而言,则不一样。如果 超链接所在的页面1.jsp在WebRoot下面,则可以                <a href="insertTalkAction.do>进入</a>直接指定Action名                 但是如果超链接所在的页面1.jsp在WebRoot下面的page下面的话,则通过"/"表示项目目录                  <a href="/WebRoot/insertTalkAction.do>让struts回到WebRoot下面再去找             [3]如果是servlet的话,不管是对于表单还是对于超链接,都必须要找到web.xml文件                在它下面有。取出"servlet/loginSer"就行了,注意不是"/servlet/loginSer",即不要加                "/"。如果超链接所在的页面就在WebRoot的下面,则可以直接使用                 <a href="servlet/loginSer"> 如果在超链接所在的页面在WebRoot下面的Page下面,则把                 则要把路径回退一级<a href="..\servlet\loginSer>让struts回到WebRoot下面再去找                <servlet-mapping>                     <servlet-name>loginSer</servlet-name>                     <url-pattern>/servlet/loginSer</url-pattern>                </servlet-mapping>            [4]对于forward中的<forward name="error" path="/error.jsp" />中的path而言               "/"表示在WebRoot下面去找,但是对于jsp而言"/"表示项目目录。                如果要在WebRoot下面的page文件夹里面的error.jsp                则修改成为<forward name="error" path="/page/error.jsp" />              举例:                1)创建一个Action名为loginAction放入ht.OA.Action下面                2)创建一个login.jsp页面放入WebRoot根目录下面                3)创建一个index.jsp与error.jsp放入WebRoot的page文件夹下面                4)创建一个servlet放入ht.OA.servlets下面                5)完成登录页面的struts的测试                                       Forward的定义转向配置         1)前面说过ActionServlet把请求转发给Action,Action会触发excute方法,在此方法中调用                   JavaBean进行业务逻辑处理,处理完毕之后,要把处理的结果显示到其它的jsp页面中。而这些               经过Action处理之后要进入的jsp页面就是Forward配置节的任务         2)Forward在struts-config.xml中配置格式如下:                        <forward name="scuess" path="/scuess.jsp" />   <forward name="error" path="/error.jsp" />           3)每一个Forward相当于一个ActionForward对像,所以struts中的           ActionSerlvet,Action,ActionForwad构成了struts的核心        说明:         A)name:用来指定forward逻辑名,以便在编程中来使用         B)path:实际要转发到的jsp页面。注意要加"/"                             Action的excute方法        1)ActionServlet接受到用户的"XXXXX.do"请求,通过struts-config.xml配置文件找到与之匹配的          Action配置节,通过Action的name属性找到与之对应的ActionForm然后把用户输入的数据填写到该          ActionForm中去,最后把请求连同ActionForm转发给Action,然后触发Action的exute方法        2)些方法里面有几个参数:              A)mapping:                1:用来获取与Action对应的forward定义转向。                2:通过mapping.findForward(name)来进行实际页面的转发             B)form:是填充了用户输入数据的ActionForm。在实际编程时,往往需要向子类转换                LoginActionForm loginActionForm=(LoginActionForm)form,得到loginActionForm之后可以                通过get方法得到用户填写的数据             C)request:得到用户的请求。事实上要得到用户输入的数据也可以通过request.getParameter方                       法,但是那样就失去了struts的作用,所以一般都会有ActionForm去得到用户所输入                        的数据,但是request.getParameter方法却可以得到get方法提交过来的数据,这是非                      常重要的             D)response:得到用户的响应             E)exute方法会返回一个ActionForward实例,而mapping.findForward(name)正好可以返回这个                 实例            

阅读(2470) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册