简单之中也蕴涵着复杂性 我们在本系列第一部分和第二部分创建 研究一个简单的Struts login
应用程序时 回避了许多这种复杂性 因为那两篇文章是给初学者的Struts入门读物 所以我们在应用程序中没有充分运用Struts类库 但现在 你已经做好准备学习更多的东西了 让我们先来看看真正的Struts程序员是如何运用ActionForward类的吧 它代表的是控制指令所导向的一个目的资源 从一个servlet内部 通过运用javax servlet RequestDispatcher类的forward
方法你就可以将控制流程引导到一个目的资源 在login应用程序的action类中 该
代码形式如下 RequestDispatcher rd = request getRequestDispatcher(destination)rd forward(request response)其中destination就是到一个目的资源的路径 但是在一个典型的Struts应用程序中 你可以用ActionForward类作为替代 运用这个类的好处就是你不再需要创建一个RequestDispatcher对象并调用它的forward方法了 你可以将ActionForward类用于一个Action类的execute方法中 注意 其中一个重载的execute方法有如下的定义 它返回一个ActionForward对象 public ActionForward execute( ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response)throws Exception因为当时我们还没有讲到ActionForward类 所以在本系列的第一部分和第二部分中所有Action类的execute方法都只返回了空值 现在 在一个Action类的execute方法中 你就可以用ActionForward类来代替下面这个RequestDispatcher对象实例了 RequestDispatcher rd = request getRequestDispatcher(destination)rd forward(request response)新的代码变成 return (new ActionForward(destination)) 构建ActionForward对象 ActionForward类提供了下面五种构造器 public ActionForward()public ActionForward(String path)public ActionForward(String path boolean redirect)public ActionForward(String name String path boolean redirect)public ActionForward(String name String path boolean redirect boolean contextRelative) 虽然这些构造器是不需要说明的 但我们应该注意下面几点 在这些构造器中 第二种可能是最常用的 后四种构造器中的path参数表示的是到目的资源薯姿的路径 后三种构造器中的redirect布尔值表示的是是否执行了一个重定向(redirect) (缺省情况下 这个值设置为false 因为redirect比forward慢雀悉 )最后 第五个构造器中的contextRelative布尔值表示该路径是否应该是context relative的 而不是module relative的 同样 一顷手乎个ActionForward实例也可以有一个逻辑名称 你可以用这个名称来查找与一个特殊的ActionMapping对象相关的实例 (参见本系列第四部分关于ActionMapping的讲述 ) 学习ActionForward类的方法 ActionForward类定义了三个保护字段——name path和redirect——它们构成了ActionForward的三个属性 ActionForward类提供getter和setter方法来从这些字段读值 给这些字段赋值 这些方法是不需要说明的 定义如下 public boolean getContextRelative()public void setContextRelative(boolean contextRelative)public String getName() public void setName(String name) public String getPath() public void setPath(String path) public boolean getRedirect() public void setRedirect(boolean redirect) 除此之外 ActionForward类还重载了toString方法并返回 ActionForward[ + name + ] 其中name是名称字段 最后 还有一个freeze方法 它固定了一个组件的配置 再次运用Login应用程序 要完全了解ActionForward类 我们需要再次运用在本系列第一部分和第二部分构建的login应用程序 你可以下载完整的应用程序 把它重命名为myStrutsApp 它的web xml和struts config xml文件同myStrutsApp 中的文件是一样的 JSP页面也没有改变 只有action类同以前不同(见列表 ) 注意下面这行代码是新的 return (new ActionForward( /mainMenu jsp ))它替代了下面这些代码 现在它们都被注释出来了 RequestDispatcher rd = request getRequestDispatcher( /mainMenu jsp )rd forward(request response)同样 下面这些代码也都被重写了 // RequestDispatcher rd = request getRequestDispatcher( /login jsp ) // rd forward(request response)新的代码变成 return (new ActionForward( /login jsp ))ViewSecretAction类ViewSecretAction也变得更好了(见列表 ) execute方法最后的这三行代码现在由一行来处理了 返回(new ActionForward ( /viewSecret jsp ))://RequestDispatcher rd = request getRequestDispatcher( /viewSecret jsp )//rd forward(request response)//return null接下来 我们来重新查看LogoutAction类(见列表 ) 注意execute方法中下面这些代码已经被替代了 // RequestDispatcher rd = request getRequestDispatcher( /login jsp )// rd forward(request response)// return null你只需要用下面这一行代码来取代它就行了 return (new ActionForward( /login jsp ))ActionForward是个很有用 功能很多的类 它可以让你更简单 更快 更直接地完成许多事情 这可能就是它很受欢迎的原因 在本系列的第四部分 你可以了解另一个重要的类 apache struts action ActionMapping 它可以使你的代码更有效 更漂亮 lishixinzhi/Article/program/Java/ky/201311/27970
学习ActionForward类的方法
ActionForward类定义了三个保护字段——name path和redirect——它们构成了ActionForward的三个属性 ActionForward类提供getter和setter方衫弯法来从这些字段读值 给这些字段赋值 这些方法是不需要说明的 定义如下
public boolean getContextRelative()public void setContextRelative(boolean contextRelative)public String getName()public void setName(String name)public String getPath()public void setPath(String path)public boolean getRedirect()public void setRedirect(boolean redirect)
汪桐除此之外 ActionForward类还重载了toString方法并返回 ActionForward[ + name + ] 其中name是名称字段 最后 还有一个freeze方法 它固定了一个组件的配置 再次运用Login应用程序 要完全了解ActionForward类 我们需要再次运或陵闷用在本系列第一部分和第二部分构建的login应用程序 你可以下载完整的应用程序 把它重命名为myStrutsApp 它的web xml和struts config xml文件同myStrutsApp 中的文件是一样的 JSP页面也没有改变 只有action类同以前不同(见列表 )
注意下面这行代码是新的 return (new ActionForward( /mainMenu jsp )) 它替代了下面这些代码 现在它们都被注释出来了
RequestDispatcher rd = request getRequestDispatcher( /mainMenu jsp )rd forward(request response)
同样 下面这些代码也都被重写了
// RequestDispatcher rd = request getRequestDispatcher( /login jsp ) // rd forward(request response)
新的代码变成 return (new ActionForward( /login jsp ))ViewSecretAction类ViewSecretAction也变得更好了(见列表 ) execute方法最后的这三行代码现在由一行来处理了 返回(new ActionForward ( /viewSecret jsp )):
//RequestDispatcher rd = request getRequestDispatcher( /viewSecret jsp )//rd forward(request response)//return null
接下来 我们来重新查看LogoutAction类(见列表 ) 注意execute方法中下面这些代码已经被替代了
//RequestDispatcher rd = request getRequestDispatcher( JAVA天堂 /login jsp )// rd forward(request response)// return null
你只需要用下面这一行代码来取代它就行了 return (new ActionForward( /login jsp )) ActionForward是个很有用 功能很多的类 它可以让你更简单 更快 更直接地完成许多事情 这可能就是它很受欢迎的原因 在本系列的第四部分 你可以了解另一个重要的类 apache struts action ActionMapping 它可以使你的代码更有效 更漂亮
lishixinzhi/Article/program/Java/ky/201311/29019
应用程序发生异常未知的软件异常的原因分析
原因1、应用程序的组件丢失造成,至于应用程序文件为什么会丢失,有时候是用户自己误删除导致,更多时候则是由病毒木马造成的,在当今网络时代,有些病毒作者为了获取不正当利益,常在一些轮键应用程序的某个组件上捆绑病毒,并在一些网站上提供这些有毒的应用程序给网友免费下载,当把用户下载了这些软件并安装到自己电脑上面时,安全软件会检测到这些感染了病毒木马的应用程序组件并将其杀掉。这就造成应用程序文件缺失,从而导致在运行程序时发生错误。
原因2、 *** 作系统文件缺失或本身的BUG造成,应用程序完整的运行需要一些系统文件或者某些ll文件支持,像那些盗版系统或Ghost版本系统,很容易出现该问题。
原因3、系统文件感染了病毒造成。
原因4、电脑硬件的问题造成,例如内存条老化有故障,或者内存条的金手指长期不清洁,灰尘过多也能造成这个问题。如果是这个问题导致,可以把金手指拔出来,用橡皮擦插掉上面的锈迹,再重新插上插槽,试试。
应用程序发生异常未知的软件异常的解决办法
方法1、用杀毒软件彻底扫描电脑看看是否存在病毒木马,在安全模式下进行彻底查杀。
方法2、如果是系统文件损坏或丢失,一般如果你使用的是盗版系统或Ghost版本系统,尽量使用完整版或正版系统友尘。
方法3、安装的软件与系统或其它软件发生冲突,把发生冲突的软件删除掉。如果更新下载补丁不是该软件的错误补丁,也会引起软件异常,解决办法:卸载该软件,重新下载重新安装试试。顺便检查开机启动项,把没必要启动的启动项禁止开机启动。
应用程序发生异常
方法4、在杀毒了之后,重新安装软件,尽量到软件的官方官方网站下载最新版本的重新安装。
方法5、如果按照上面的方法做了之后都还没有恢复正常的话,可以试试下面的命令。
开始菜单→运行→输入cmd,输入下面的指令:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
回车执行。
完成以后,再输入
for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i
回车执行。系统文件损坏或丢失文安壮了次系统或不自
这两条命令比较长,你可以将这些指令复制之后直接粘贴过去再执行。
总结:当我们 *** 作不当导致应用程序的组件丢失和损坏的时候,也会出现应用程序错误。电脑系统或者软件冲突的时候,也会造成腊告巧应用程序错误。电脑硬件出现故障的时候,也会导致应用程序错误。
评论列表(0条)