struts2 二

本文详细介绍了 Struts2 中各种处理结果类型的作用与使用场景,并深入探讨了 OGNL 的语法及其在 Struts2 中的应用方式,包括如何利用 OGNL 实现动态页面跳转。


   一 , struts2 的处理结果类型
   
   
   
   chain                用来处理Action链的结果类型
   
   chart                用来处理jfreeChart图标的结果类型,
   
   dispatcher           用来转向页面,通常处理jsp,html页面的结果类型,是struts2的默认结果类型
   
   freemaker            用来处理freemaker的结果类型
   
   httpheader           用来控制特征http行为的结果类型
   
   jasper               用来处理jasperReports报表的结果类型
   
   jsf                  处理jsf的结果
   
   redirect             用来直接跳转到某个url的结果类型
   
   redirectAction       用来直接跳转到某个Action类型
   
   stream               用来向浏览器发生InputStream对象,通常用来处理文件下载,还可以用于返回Ajax数据
   
   titles              用来与titles框架整合的结果类型
   
   velocity           处理velocity模板
   
   xslt               处理xml/xlst模板结果类型
   
   plaintext          用来显示原始文件内容,文件源代码
   
   
   
   
   
   二 , 定义全局 result  ,对全局都有效,局部只对当前Aciton有效
   
   
   <global-results>
   
   <result name="exception">/exception.jsp</result> 
    
    全局 result  ,局部在跳转时可以带参数,参数名为actionName,值为viewCart
   <result name="toViewCart" type="redirect-action">
   
   <param name="actionName">viewCart</param>
   
   </result> 
   </global-results>
   
   
   
   <action name="login" class="com.xiu.LoginAction" method="login">
          
       物理视图使用OGNL表达式进行动态表示, targetUrl是当前Action实例中的一个属性
     <result name="target">${targetUrl}</result>
   </action>
   
   
   
   
   三,   OGNL(Object Graphic Navigation Language 对象图导航语言) 
   
        OGNL是一种强大的EL表达式语言,
   
        struts2将ActionContext 设置为OGNL中的上下文, 值栈valueStack则是OGNL上下文中的根元素,这样一来就可以通过OGNL表达式从
           值栈ValueStack 中自上至下的读取对象或者对象的属性 ,
   
       如果值栈中person与dog 两个对象均包含name属性,当我们读取name属性时,首先会返回栈顶person对象的name属性,
      
           这是由堆栈数据结构的特性所决定的。
           
           在OGNL表达式语言中,访问根元素(如值栈valueStack)中的对象或者属性时可直接使用${属性名}的方式,
           值得注意的是,struts2创建的业务控制器Action实例是保存在valueStack中的,因此 Action的属性同样
           可以直接访问,
         ${loginName}   //读取valueStack中的 loginName属性
           
           
           
           其实,ActionContext中还有几个与valuestack无关,且常用的命名对象,如 parameters,request,session,application,attr,
           
           在访问时加上#号
           
           #parameters['p'] 或者#parameters.p  等同于request.getParameter("p");
           #request['p'] 或者#request.p  等同于request.getAttribute("p");
           #session['p'] 或者#session.p  等同于session.getAttribute("p");
           #application['p'] 或者#application.p  等同于application.getAttribute("p");
           
           
           
          
          
       四,  ActionContext与ValueStack的关系

       



     

      五,OGNL的用法如下


     ${loginName}              //读取valueStack中的 loginName属性
     
     #属性名,                  #parameters['p'] 或者#parameters.p  等同于request.getParameter("p");
                                #request['p'] 或者#request.p  等同于request.getAttribute("p");
                                #session['p'] 或者#session.p  等同于session.getAttribute("p");
                                #application['p'] 或者#application.p  等同于application.getAttribute("p");
                                
                                
                                
                                
                                
     %                          当标签的属性为字符串时,计算OGNL表达式的值 <s:set name="label" value="%{getText('label-rownum)}"/>
     
     
     
    {元素1,元素2,元素3}        定义一个拥有n个元素的list对象,如{'green','red','blue'}
    
    
    #{'key1':'value1','key2':'value2'}    定义拥有n个元素的map对象, #{'menu1':'a','menu2':'2'}
    
    @类全名@静态属性名                       @com.xiu.LoginAction@SUCCESS
    
    @类全名@静态方法                         @com.xiu.LoginAction@isLogin()
    
    集合对象(元素的公共属性名)               userList.{username} 取得所有用户的的姓名列表
    
    #this                                    当前对象的引用, 等于this
    
    ?选择符                                  选择满足条件的所有元素  userList{?#this.age>18} 将选择所有年龄大于18岁的用户
    
    ^  选择符                                选择满足条件的第一个元素, userList{^#this.age>18}    将选择年龄大于18岁的第一个用户
    
    $选择符                                   选择满足条件的最后一个元素, userList{$#this.age>18}    将选择年龄大于18岁的最后一个用户

           
   
   
    六, struts的异常处理
    
     异常分为全局异常和局部异常
     
     1.将exception-mapping放置在global-exception-mappings元素中时,表示全局异常,全局异常将对所有Action有效
     
     2.将exception-mapping放置在action中时表示局部异常只对当前action有效
     
     定义为全局result
     <global-results>
     
     <result name="exception">/exception.jsp</result>
     </global-results>
     
      定义为全局异常
      <global-exception-mappings>
      
      <exception-mapping exception="java.lang.Exception" result="exception"/>
      
      </global-exception-mappings>
           
           
           在页面中使用<s:property value="exception.message"/>
   
数据集介绍:垃圾分类检测数据集 一、基础信息 数据集名称:垃圾分类检测数据集 图片数量: 训练集:2,817张图片 验证集:621张图片 测试集:317张图片 总计:3,755张图片 分类类别: - 金属:常见的金属垃圾材料。 - 纸板:纸板类垃圾,如包装盒等。 - 塑料:塑料类垃圾,如瓶子、容器等。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式为常见图像格式(如JPEG/PNG)。 、适用场景 智能垃圾回收系统开发: 数据集支持目标检测任务,帮助构建能够自动识别和分类垃圾材料的AI模型,用于自动化废物分类和回收系统。 环境监测与废物管理: 集成至监控系统或机器人中,实时检测垃圾并分类,提升废物处理效率和环保水平。 学术研究与教育: 支持计算机视觉与环保领域的交叉研究,用于教学、实验和论文发表。 三、数据集优势 类别覆盖全面: 包含三种常见垃圾材料类别,覆盖日常生活中主要的可回收物类型,具有实际应用价值。 标注精准可靠: 采用YOLO标注格式,边界框定位精确,类别标签准确,便于模型直接训练和使用。 数据量适中合理: 训练集、验证集和测试集分布均衡,提供足够样本用于模型学习和评估。 任务适配性强: 标注兼容主流深度学习框架(如YOLO等),可直接用于目标检测任务,支持垃圾检测相关应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值