admin 管理员组

文章数量: 887021


2023年12月23日发(作者:css的所有属性)

配置Result一个result代表了一个可能的输出。当一个Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。Results配置由两部分组成:一部分是result映射,另一部分是result类型。1.结果映射在文件中,使用result元素来配置result映射。result元素有两个可选的属性:属性nametype是否必须否否指定result的逻辑名指定result的类型,不同类型的result代表了不同类型的结果输出.说明在Struts2中允许定义一个默认的Result类型,这是通过result-type元素来定义的。在框架的默认配置文件中,在包中有如下的一个配置:result-type元素的default属性指定名为dispatcher的结果类型,dispatcher结果类型使用ServletAPI中的ResultDispatcher将请求导向到目标资源(通常是JSP页面)。如果在使用result元素配置result映射时,没有使用type类型,那么框架就将使用默认的dispatcher类型。由于Struts2中的包是可以继承的,所以我们定义的package只要继承了struts-default包,因此也继承了默认的结果类型,所以可以省略result元素的type属性。如果没有指定result元素的name属性,那么框架将把它命名为”success”。2.结果类型在框架调用Action对请求进行处理之后,就要向用户呈现一个结果视图,Struts2支持多种类型的视图,这些视图是由不同的结果类型来管理的。一个结果类型就是实现了接口的类,在Struts2中定义了多种结果类型,如下表所示:结果类型chaindispatcherfreemarkerhttpheaderredirectredirectActionstreamvelocityxslt用于Action链式处理用于Web资源的集成,包括JSP的集成用于FreeMarker的集成用于控制特殊的HTTP行为用于重定向到另外的URL(Web资源)用于重定向到另外的action资源用于向浏览器返回一个InputStream(通常用于文件下载)用于Velocity集成用于XML/XSLT说明

plainText用于显示某个特定页面(例如JSP,HTML)的原始内容(即页面的代码)结果类型在包中使用result-type元素定义,以下列出的结果类型都是在框架的默认配置文件中定义的。我们也可以创建自己的结果类型注册到引用程序中。首先需要编写一个实现了接口的类,然后在文件中使用result-type元素来注册你的结果类型。自定义的结果类型可以生成E-mail,或者生成JMS消息,也可以生成图像等。3.常用结果类型1>dispatcher结果类型:Struts2在后台使用ServletAPI的RequestDispatcher来转发请求,因此在用户的整个请求/相应过程中,目标Servlet/JSP接收到的request/response对象,与最初的Servlet/JSP相同。disptcher结果类型的实现类是:tDispatcherResult该类有两个属性:location和parse,这两个属性可以通过配置文件中的result元素的param子元素来设置。param元素的name属性

指定结果类型实现类的属性名。param元素的内容给出属性的值。例如:/true其中,location参数用于指定action执行完毕之后要转向的目标资源,parse是一个布尔值的属性,如果为true,则解析lcation参数中的OGNL表达式,如果为false,则不解析。parse默认值是true2>redirect结果类型:redirect结果类型在后台使用HttpServletResponse的sendRedirect方法,将请求重定向到URL,它的实现类是tRedirectResult.在使用redirect时,用户要完成一次与服务器之间的交互,浏览器需要发送两次请求。过程如下:1.浏览器发出一个请求,Struts2框架调用对应的Action实例对请求进行处理,返回”success”结果码,框架根据这个结果码选择对应的结果类型,这里使用的死redirect结果类型.tRedirectResult在内部使用HttpServletReponse的sendRedirect方法将请求重定向到目标资源。4.浏览器重新发起一个针对目标资源的新的请求。5.目标资源作为响应呈现给用户。使用redirect结果类型,实际上是告诉浏览器目标资源所在位置,让浏览球重新访问目标资源。由于在一次用户交互过程中存在着两次请求,所以第一次请求中的数据在第二次请求中是不可用的,这意味着在目标资源中是不能访问action实例,action错误以及字段错误等。如果有某些数据需要在目标资源中访问,一种是将数据保存在Session中,另一种方式是通过参数来传递数据。3>redirectAction结果类型redirectAction结果类型的实现类是tActionRedirectResult,该类是ServletDispatcherResult的子类,所以redirectAction结果类型和redirect结果类型的后台工作原理是一样的,即都是利用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL。redirectAction结果类型主要是用于重定向到action,在请求处理完成之后如果需要重定向到另一个action,建议使用redirectAction类型。使用redirectAction结果类型,可以简化那些带有名称空间的actionURL的设置。ServletActionRedirect类在内部使用ActionMapper来构建访问action的URL,这样就不需要在配置文件中去手动编码访问action的URL了。

redirectAction结果类型有两个参数,如下所示:1>actionName指定要访问的action的名字,该参数是默认参数。2>namespace指定action所属的名称空间。如果没有使用这个参数,那么默认使用当前的名称空间。实例如下:/WEB-INF/News/{1}.jsploginPage/login/WEB-INF/News/{0}.jsp/WEB-INF/News/4.全局结果在某些场景中,可能有多个action需要访问同一个结果,例如在论坛系统中,用户在发帖回帖时都需要先登录,这时,我们就需要配置一个全局的login结果了。全局结果也是在包中定义的,在这个包中的所有action可以共享全局结果,全局结果也是使用result结果来配置,只不过不是在action元素中嵌套,而是在元素中嵌套。/WEB-INF/login

/WEB-INF/BBS//WEB-INF/BBS/当请求/bbs/时,AddAriticleAction的Execute方法如果返回login结果码,那么框架将首先在addAriticle这个action的配置中查找嵌套的局部结果。如果没有找到匹配的局部结果,那么就在全局结果中查找,找到后,应用redirectAction结果类型将请求重定向到/bbs/,如果用户登录失败或者发帖失效,Action返回error结果码,此时全局中的页面将呈现给用户。5.动态结果


本文标签: 结果 类型 请求 使用 资源