Strust2-----7、配置处理结果

(1)、理解处理结果

Action处理完用户请求后,并未直接将请求转发给任何具体的视图资源,而是返回一个逻辑视图,Struts2框架收到这个逻辑视图后,把请求转发到对应的视图资源,视图资源(可为FreeMarker视图资源,甚至可将请求转给下一个Action处理,形成Action的链式处理)将处理结果呈现给用户

(2)、配置结果

Struts2的Action处理用户请求结束后,返回一个普通字符串---逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可让系统转到实际的视图资源

简单的说,结果配置是告诉Struts2框架:当Action处理结束时,系统下一步做什么,系统下一步应该调用哪个物理视图资源来显示处理结果

根据<result…/>元素在struts.xml文件中的位置不同,配置结果分:

局部结果:将<result.../>作为<action.../>元素的子元素配置

全局结果:将<result.../>作为<global-results.../>元素的子元素配置

配置<result.../>元素可指定如下两个属性:

name:指定所配置的逻辑视图名

type:指定结果类型

<action name=”Login”class=”lee.LoginAction”>
          <!—为success的逻辑视图配置Result,type属性制定结果类型 -->
          <result name=”success”type=”dispatcher”>
              <!—制定逻辑视图对应的实际视图资源 -->
              <param name=”location”>/temp.jsp</param>
          </result>
</action>

上面的<result.../>元素使用了最繁琐的形式,既制定了需映射的逻辑视图名success,也制定了结果类型dispathcer,并使用子元素的形式来制定实际视图资源;该配置表示当Action返回名为success的逻辑视图名时,系统将转发到temp.jsp页面

其中<param.../>元素中的name可取值:

location:指定该逻辑视图对应的实际视图资源

parse:指定是否允许在实际视图名字中使用OGNL表达式,默认true

通常无须指定parse参数值,故常采用如下配置实际视图资源:

<action name=”Login”class=””>
          <result name=”success”type=”dispatcher”>/temp.jsp</result>
</action>

省略location参数,系统将会把<result...>…</result>中间的字符串当成实际视图资源

省略type属性,则使用系统默认的type属性(dispatcher:用于与jsp整合的结果类型):

<action name=”Login”class=””>
          <result name=”success”>/temp.jsp</result>
</action>

省略name属性,则使用系统默认的name属性success:

<action name=”Login”class=””>
          <result>/temp.jsp</result>
</action>

(3)、Struts2支持的结果类型

结果类型决定了Action处理结束后,下一步将 调用哪种视图资源来呈现处理结果

Struts2的结果类型要求实现com.opensymphony.xwork2.Result;该结果是所有类型的通用接口,如需自己的结果类型,应提供一个实现该接口的类,并在struts.xml文件中配置该结果类型

Struts2内建的支持结果类型:

dispatcher:直接跳转到其他URL(转发) 指定使用JSP作为视图 (默认)

redirect:直接跳转到其他URL(从定向)

chain:直接跳转到其他Action(转发) Action链式处理

redirectAction:直接跳转到其他Action(从定向)

freemarker:指定使用FreeMarker模板作为视图

velocity:指定使用Velocity模板作为视图

httpheader:控制特殊的HTTP行为

stream:向浏览器返回一个InputStream(一般用于文件下载)

xslt:与XML/XSLT整合

plainText:显示某个页面的原始代码

从action1直接跳转到action2:

1:保存前一个action的request对象:

<result name=”a2”type=”chain”>action2</result>

2:不保存前一个action的request对象:

<result name=”a2”type=”redirectAction”>action2</result>

<struts>
         <constant name="struts.enable.DynamicMethodInvocation"value="false"></constant>

         <package name="demo" extends="struts-default">
           <action name="*Action"class="WEB.Action" method="{1}">
              <result name="computerListAction"type="chain">computerListAction</result>
              <result name="cartJsp">/cart.jsp</result>
              <result name="cartAction"type="redirectAction">cartAction</result>
           </action>
        </package>
</struts>

(4)、plainText结果类型

<result type=”plainText”>
     <!—制定实际的视图资源 -->
               <param name=”location”>/welcome.jsp</param>
               <!— 指定使用的字符集来处理页面代码 -->
               <param name=”charSet”>GBK</param>
</result>

(5)、redirect结果类型

与dispatcher相对,dispatcher是将请求forward到指定的JSP资源;而redirect则将redirect到指定的视图资源

<result type=”redirect”>/welcoome.jsp</result>

(6)、redirectAction结果类型

与redirect类习惯非常相似,也是重新生成一个全新的请求;但redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求

当需要让一个Action处理结束后,直接将请求重定向到另一个Action时,应使用此结果类型

<result type=”redirectAction”>
            <!—指定重定向的actionName -->
            <param name=”actionName”>dashboard</param>
            <!—指定重定向的Action所在的命名空间-->
            <param name=”namespace”>/secure</param>
</result>

redirect:重新生成一个新请求,用于生成一个对具体资源的请求

redirectAction:重新生成一个新请求,用于生成对另一个Action的请求

(7)、动态结果

动态结果的含义是指在指定实际视图资源时用表达式语法,通过这种语法可允许Action处理完用户请求后,动态转入实际视图资源

<action name=”crud_*”class=”lee.CrudAction” method=”{1}”>
           <result>/{1}.jsp</result>
</action>

(8)、Action属性值决定物理视图资源

配置<result.../>元素时,不仅可使用${0}表达式形式来指定视图资源,还可用${属性名}的方式来指定视图资源;${属性名}里的属性名就是对应Action实例里的属性;还可使用完全的OGNL表达式(${属性名.属性名.属性名})

<action name=”save” class=”org.app.action.SkillAction”method=”save”>
           <!—使用OGNL表达式来制定结果资源 -->
           <result type=”redirect”>edit.action?skillName=${currentSkill.name}</result>
</action>

(9)、全局结果

全局结果对所有的Action都有效

<package name=”test”extends=”struts-default”>
            <!—定义全局结果 -->
           <global-results>
                 <resultname=”success”>/${target}.jsp</result>
           </global-results>
            <action name=”MyAction”class=”org.app.action.MyAction” />
            <action name=””>
                <result>.</result>
            </action>
</package>

若一个Action里包含了与全局结果同名的结果,则Action里的局部Result会覆盖全局Result

(10)、使用PreResultListener

PreResultListener是一个监听器接口,它可在Action完成控制处理之后,系统转入实际物理视图之间被回调

Struts2应用可由Action、拦截器添加PreResultListener监听器;可通过ActionInvocation的addPreResultListener()添加;一旦为Action添加了该监听器,该监听器就可在应用转入实际物理视图之前回调该监听器的beforeResult方法;一旦为拦截器添加了该监听器,该监听器会对该拦截器所拦截的所有Action都起作用

public class LoginRegistAction extendsActionSupport{
           private String username;
           private String password;
           private String tip;
           // 省略三个属性的setter、getter方法

           public String regist() throwsException{
                ActionContex.getContext().getSession().put(“user”,getUsername());
                setTip(“恭喜你,” +getUsername() + “你已注册成功!”);
                return SUCCESS;
           }

           public Stringexecute() throws Exception{
                ActionInvocation invocation =ActionContext.getContext().getActionInvocation();
                Invocation.addPreResultListener(newPreResultListener(){
                     public void beforeResult(ActionInvocationinvocation,String resultCode){
                     System.out.println(“返回的逻辑视图名字为:” + resultCode);
                     // 在返回Result之前加入一个额外的数据
                   invocation.getInvocationContext().put("extra",new java.util.Date() + "由" + resultCode + “逻辑视图名转入”);
                   //也可加入日志等
                }
           );

           if(getUsername().equals("xx") && getPassword().equals("123")){
          ActionContext.getContext().getSession().put("user",getUserName());
              setTip("欢迎," + getUsername() + ",你已登录成功!");
              return SUCCESS;
           }
           else{
              return ERROR;
           }
    }
}
时间: 2024-11-08 18:25:31

Strust2-----7、配置处理结果的相关文章

strust2 配置chainAction结果类型的配置

<result name="chainAction" type="chain"> <param name="actionName">departmentAction</param> <param name="method">queryPageResult</param> </result>原理:也是通过对应的一个Interceptor完成,再次进行一次访问

struts.xml配置解释

1.struts.xml配置文件中的<package>中的name表示包名,可以看成是一个模块名称, name属性必需,用于被其他的包引用当前包2.extends默认我们会继承struts-default包,它里面默认有写加载器.过滤器之类的配置, 当前包继承哪个包,继承的,即可以继承其中的所有配置,通常情况下继承struts-default 我们可以直接使用,该包在 下的 中 3. 什么是action: 一个struts2的请求就是一个action 4. 看到class.method属性可以

Struts2学习第一天——struts2基本流程与配置

struts2框架 什么是框架,框架有什么用? 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率. 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实现 ? 什么是struts2框架,它有什么用? Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架. 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts 2以WebWork为核心 struts2=struts1+

JAVA EE Demo[购物商城 Strust2]

为了搞定作业,我开始了J2EE的Strust2框架实现一个简单的商城Demo 先创建Java Web Service项目.添加JDBC驱动,导入Strust2框架得到这个: 啧啧.既然是购物商城我们继续沿用上篇文章的结构,欢迎页+商城物品列表+购物车+登录 ,则很明显我们需要一个导航栏 创建一个导航栏:head.html 这样我们以后就可以利用JSP标签将这个导航栏嵌入到任何需要的界面了 而导航栏的内容包括欢迎页 商城物品列表 购物车 登录 登出 这些选项 这个时候弄完这个先得到以下: 然后我们

Strust2拦截器

Struts拦截器 filter:对所有的东西都过滤..css,.js,.jpg.interceptor:对action拦截.struts工具. 一.拦截器配置.第一步:创建一个类,让其继承自AbstractInterceptor第二步:配置struts.xml 1.添加<interceptors>配置节,添加拦截器配置. 2.在action中引用,<interceptors>中的配置. 注意:1.在action中需要添加defaultStack引用 2.在建<interce

MyEclipse10搭建Strust2开发环境

一.创建一个JavaWeb项目 启动MyEclipse10    ,然后在MyEclipse中创建一个JavaWeb项目,点击[File]---->[New]---->[WebProject],如下图所示: 此时将会弹出一个创建项目的对话框,如下图所示: 点击[Finish]按钮后,如果工作空间当前的编译环境和项目需要的编译环境不一致,此时会弹出一个警告对话框,如下图所示: 这个警告对话框说的是“Basic_Struts2”项目的编译环境必须是6.0的,对应的JDK就是JDK1.6,而我们当前

自写开发平台ssmy_m(与代码生成) strust2 mybatis spring maven jquery

自己写的开发平台ssmy_m 与代码生成 ,strust2 mybatis spring maven jquery jqgrid jqueryui 有问题请留言,或QQ110146324 SVN上的代码基础功能已经都有了.美工没弄,有需要的自己改吧. 在/ssmy_m/src/main/webapp/common/include_com.jsp里引用.否则代码生成会有影响 开发平台 svn: https://m2.svnspot.com/lpy3654321.ssmy_m/ 开发平台页面 : 代

struts学习笔记(1)基本配置

Struts2  学习笔记 吃透最简单的Helloword实例之后 ,接着再一一去研究 请求参数的接收与发送,参数的封闭,校验,result,struts2标签库这些最为核心的东西(其实这些也正是最常用的东西),经过这样的学习,应该领会了一些Struts2的流程,接着再去阅读相关文档去了解Strust2的拦截器设计思想(这叫先使用再体会的学习方法),接着可以做一些针对于自定义拦截器的实现来深化对Struts2的认识.此时,你已经达到企业中使用的级别了,接下来就可以玩一些SSh整合 一.基本配置 

strust2的核心和工作原理

在学习strust2之前,我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Strust设计的第一目标就是使MVC模式应用于web程序设计. 技术优势 Struts2有两方面的技术优势. 一是所有的Struts2应用程序都是基于client/server HTTP交换协议,the java servlet api揭示了java servlet只是java api的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的java语言进行程序设计. 二是提供了对MVC的

IDEA 搭建strust2开发环境

最近觉得IDEA这个java开发工具挺不错的,于是尝试从MyEclipse转到IDEA来试试,用了才发现的确不错,代码提示和界面都用的挺爽的,于是便采用IDEA来开发java web项目,顺便记录一下IDEA搭建strust项目的过程. step1:打开IDEA选择create New project选中如图所示 step2:配置tomcat服务器,点击Application server右侧的New->tomcat server,指定tomcat服务器的路径 step3:引入strust所依赖