知识大全 用ActionMapping构建漂亮的Struts应用程序
Posted 属性
篇首语:人不能只做正确的选择,偶尔也得做一些喜欢的选择。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用ActionMapping构建漂亮的Struts应用程序相关的知识,希望对你有一定的参考价值。
用ActionMapping构建漂亮的Struts应用程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
邱吉尔曾经说过他喜欢学习新东西 但他觉得没有必要让别人教他 不管你是否喜欢学习新知识 也不管有人教你还是你自学 学习Java通常意味着仔细研究许多特殊的类 学习Struts也是如此 这就是我写本系列第四部分的初衷 在本文中 我将详述 apache struts action ActionMapping类 它是从onfig ActionConfig派生的 ActionMapping将一个请求路径映射到一个action类 它是Struts应用程序中最常用的类之一 在你深入学习这个类时 你会重新用到在该系列第 和 部分创建的两个login应用程序 从而了解如何运用ActionMapping来重写应用程序 当然 你可能不记得以前用过任何ActionMapping实例了 这是因为控制器servlet实际上为你创建了它们 你只需要配置在Struts配置文件(struts config xml)中创建的每个ActionMapping实例就行了(通过给它的属性赋值) 了解这些属性对正确运用ActionMapping类很重要 因此我将讲述这些属性以及如何定义它们 首先 让我们回想一下 Struts配置文件的根元素是<struts config> <struts config>元素可以包含一个可选的<action mappings>元素 同样<action mappings>元素可以包含<action>元素 例如 下面就是本系列第三部分的login应用程序配置文件中的<struts config>元素及其子元素 <struts config> <action mappings> <action path= /login type= javapro struts LoginAction /> <action path= /logout type= javapro struts LogoutAction /> <action path= /viewSecret type= javapro struts ViewSecretAction /> </action mappings> </struts config> <action mapping>中的每个<action>都代表控制器servlet创建的一个ActionMapping实例 一个<action>元素可以包含多个特性 每个特性都和ActionMapping实例中的一个属性相应 作为例子 我们来看前面的Struts配置文件中的这个<action>元素 <action path= /login type= javapro struts LoginAction /> 这个<action>将路径 /login 映射到action类 javapro struts LoginAction 换句话说 一个以 /login do 结尾的用户请求将被传递到LoginAction类 然而 ActionMapping也有其它的用途 你(Struts程序员)可以通过给它的属性赋值来给ActionMapping实例下达action指令 (有些属性与action forms相关 我将在本系列的第五部分讲述 ) ActionMapping类的属性 ActionMapping有许多属性 首先 它从ActionConfig类继承了一些属性——如type forward include和unknown 它们与action forms是无关的 前三个属性是ActionMapping类最重要的属性 你只能指定其中的一个 所以 如果一个<action>元素已经定义了一个type属性 它就不能有forward属性或include属性了 type属性的值是路径所映射的Action类的完全限定的Java类的名称 (你曾在前面的login应用程序中的Struts配置文件中用过这个属性 )如果运用了type属性 那么控制器servlet就可以调用action实现类的execute方法 传递恰当的ActionMapping实例 注意 apache struts action Actionclass类的execute方法有如下的定义(第一个参数是一个ActionMapping实例) public ActionForward execute(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws IOException ServletException forward属性代表的是满足该请求的context relative资源(通过调用RequestDispatcher forward()) 而不是实例化type属性指定的Action类 (更多关于如何运用这个属性的信息 参见后面的 修改login应用程序 部分 ) 我们给include属性赋的值是满足该请求的context relative资源路径(通过调用RequestDispatcher include()) 而不是实例化type属性指定的Action类 注意 <action>元素包含的forward属性与可能出现在<action>元素下的<forward>元素是不同的 这就是说 一个<action>元素可以有一个type属性 以及一个或多个<forward>子元素 如下面这个<action>元素所示(我马上会讲述<forward>元素) <action path= /login type= javapro struts LoginAction > <forward name= success path= /mainMenu jsp /> <forward name= failure path= /login jsp /> </action> 我们用<path>属性来指定这个ActionMapping将处理的请求路径 最后 用unknown属性来处理未知的路径 在一个action元素中 将这个属性设置为true 使这个action成为该应用程序缺省的action 换句话说 它处理所有其它的action不能处理的请求 在一个单独的应用程序中 只有一个action可以被定义成是缺省的 例如 下面这个<action>元素将unknown属性设置为true 使该action成为缺省的 <action path= /login type= javapro struts LoginAction unknown= true /> <forward>元素 <forward>元素描述了一个逻辑名称与一个context relative URI路径识别的资源之间的映射 它有以下这些属性 · className 这是你想运用的ActionForward实现类的完全限定的Java类的名称 缺省情况下 它的值是作为 forward 初始化参数给Struts控制器servlet配置的 · contextRelative 在一个模块化应用程序中 如果路径属性是以一个斜线( / )开头的 并且是相对于整个Web应用程序的 而不是相对于该模块的 我们就将这个属性设置为true 缺省情况下是false · name 这是forward的唯一标识符 用来在应用程序的action类中引用它 · path 被映射资源的context relative路径 · redirect 设置成true 运用sendRedirect()引导到该资源 或者设置成false 运用RequestDispatcher forward()作为替代 运用<action>下的<forward>元素意味着你不必在你的ActionForward对象中写死路径名 例如 我们来看前面的login应用程序中LoginAction类的execute方法中的代码 public ActionForward execute(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws IOException ServletException String userName = request getParameter( userName ); String password = request getParameter( password ); if (userName!=null && password!=null && userName equals( john ) && password equals( )) HttpSession session = request getSession(); session setAttribute( loggedIn ); return (new ActionForward( /mainMenu jsp )); else return (new ActionForward( /login jsp )); 注意 最后的两个return语句写死了mainMenu jsp和login jsp页面 如果任意一个文件名发生改变 你都必须重新编译LoginAction类 但是如果你用<forward>元素 你可以用一个名称映射mainMenu jsp页面 用另一个名称映射login jsp页面 现在 如果你需要改变文件名 你就可以在配置文件中进行改变 而不需要重新编译了 要这么做 你需要在struts config xml文件中声明这个<action>元素 <action path= /login type= javapro struts LoginAction > <forward name= success path= /mainMenu jsp /> <forward name= failure path= /login jsp /> </action> 现在 mainMenu jsp就与 success 这个名称联系在一起了 login jsp与 failure 联系在一起了 你可以通过调用ActionMapping类的findForward方法 传入相关的名称从一个action实现类的内部得到ActionForward实例 mapping findForward(name); 例如 要得到包含路径 /mainMenu jsp 的ActionForward对象 我们可以用下面的方法 mapping findForward( success ); 同样 要得到包含路径 /login jsp 的ActionForward对象 可以用 writemapping findForward( failure ); 接下来 我们该用<forward>方法重写login应用程序了 修改Login应用程序 注意 你在第三部分创建的login应用程序发生了怎样的变化 首先 我们来看原应用程序中ViewSecretAction类的execute方法 public ActionForward execute(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws IOException ServletException return (new ActionForward( /viewSecret jsp )); 除了返回一个路径是 /viewSecret jsp 的ActionForward对象外 该execute方法没有做任何的处理 通过运用struts config xml文件中<action>元素的forward属性 我们就不需要ViewSecretAction类了 要实现这一点 我们可以将下面的<action>代码 <action path= /viewSecret type= javapro str cha138/Article/program/Java/ky/201311/27894相关参考
上述两个actionmapping调用的是同一个action类只是执行的方法不同而已并且所执行的方法名都是actionmapping名字的开头部分而且actionmapping的名字除去方法名之后
用JavaServlet构建旗帜广告系统 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于一个
用导航组件来构建动态Portal菜单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介Grid
用JFace和SWT构建简单的应用程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 开
知识大全 用NuSphere MySQL快速构建Linux网络平台
用NuSphereMySQL快速构建Linux网络平台 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
对于方法的创建可将其想象成为自己写的每个类都调用一次initialize()这个名字提醒我们在使用对象之前应首先进行这样的调用但不幸的是这也意味着用户必须记住调用方法在Java中由于提供了名为
用ASP.NET构建完整E-mail发送系统 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果
知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎
用Java+MySQL+PHP轻松构建跨平台的搜索引擎 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 英语翻译:多漂亮的天鹅啊! 怎样用how和what开头
英语翻译:多漂亮的天鹅啊!怎样用how和what开头?速度,速度。Howbeautifultheswanis!Whatabeautifulswanitis!英语翻译.速度Canyouhelpmewit
在面试结束前,大多数的主考官都会丢问题给求职者,最常见的就是:你有没有什么问题或疑问,想要提出来的?无论求职者是否有提出问题,其实,这个问题背后的真正含意,通常是主考官用来测试你对这份工作有多大的企图