Struts2--异常配置和常用通用标签--day05--20200401

异常配置

配置单个异常处理

exception-mapping 元素
1)action的子标签
2)配置当前action的声明式异常处理包含两个属性:
exception:异常的全类名
result:返回结果

    <action name="product-save" class="com.atguigu.struts2.helloworld.Product"
     method="save">
     <exception-mapping result="input" exception="java.lang.ArithmeticException"></exception-mapping>
     <result name="details">/WEB-INF/pages/details.jsp</result> 
     <result name="input">/input.jsp</result>
    </action>

3)当某个 exception-mapping 元素声明的异常被捕获到时, ExceptionMappingInterceptor 拦截器就会向 ValueStack 中添加两个对象:
exception: 表示被捕获异常的 Exception 对象
exceptionStack: 包含着被捕获异常的栈
获取报错信息代码如下:

<s:property value="exception"/>
<br>
<s:property value="exception.message"/>

配置全局异常处理

global-exception-mappings元素
1)package子标签
2)语法示例如下:

 <global-results><!--必须放在global-exception-mappings之前,否则报错,并且在action方法之前-->
  <result name="input">/input.jsp</result>
 </global-results>
 <global-exception-mappings>
  <exception-mapping result="input" exception="java.lang.ArithmeticException"></exception-mapping>
 </global-exception-mappings>

异常捕获机制

声明式异常处理机制由 ExceptionMappingInterceptor 拦截器负责处理。

Struts2自动将Action对象放入到值栈的时间点

1)先创建一个StrutsActioinProxy对象中
2)在创建StrutsActionProxy之后,对其进行初始化,把Action对象放入了值栈中。

常用通用标签

property 标签

详见链接

url 标签

作用:创建url
1)构建一个普通的url请求

<s:url value="" var="">
 <!--value:默认跟在应用后面;var:url访问变量名-->
 <s:param name="" value=""></s:param>
 <!--name:路径后面的变量名;
 value:变量参数值,并且会自动的进行OGNL解析,
   若不希望解析使用但引号引起来-->
</s:url>

例子代码:

 <s:url value="/getProduct" var="url">
  <s:param name="productId" value="1001"></s:param>
 </s:url>
${url}

输出结果:
/struts2-5/getProduct?productId=1001
2)构建一个action url请求
例子代码:

<s:url action="testAction" namespace="/helloWorld" method="save" var="url4"></s:url>
<br>

输出结果:
/struts2-5/helloWorld/testAction!save.action
3)获取请求参数中的标签

<!--includeParams:get(只获得get传送过来的请求参数)、all(获取所有请求惨事)、none-->
<s:url value="testUrl" var="url5" includeParams="all"></s:url>
${url5}

set标签

在这里插入图片描述

 <s:set name="productName" value="productName" scope="request"></s:set>
 <!--对value进行OGNL解析,且经测试单引号没有办法完成赋值操作-->
 productName:${requestScope.productName}

push标签

1)将把一个对象压入 ValueStack 而不是压入 ContextMap,标签结束时将对象弹出栈.

<%
 Product product=new Product();
 product.setProductId(1111222);
 product.setProductName("xxxxx");
 request.setAttribute("product",product);
%>
 <br>
 <s:push value="#request.product">
  ${productName}
 </s:push>
 <br>
 ${productName}<!--对象被弹出-->

if, else 和 elseif 标签

<s:if test="productPrice>1000">
  I7处理器
 </s:if>
 <s:elseif test="productPrice>800">
  I5处理器
 </s:elseif>
 <s:else>
  I3处理器
 </s:else>

iterator 标签

iterator 标签用来遍历一个数组, Collection 或一个 Map, 并把这个可遍历对象里的每一个元素依次压入和弹出 ValueStack 栈
在这里插入图片描述
在这里插入图片描述

<%
  List<Product> product2=new  ArrayList<Product>();
  product2.add(new Product(000001,"aaa","aaaaaa",111));
  product2.add(new Product(000002,"bbb","bbbbbb",111));
  product2.add(new Product(000003,"ccc","cccccc",1111));
  product2.add(new Product(000004,"ddd","dddddd",1111));
  request.setAttribute("product2",product2);
 %>
 <s:iterator value="#request.product2" status="status" begin="1" end="3">
  ${status.index}-${status.count}:${productName}<br>
 </s:iterator>
 <s:debug></s:debug>

输出结果:
0-1:bbb
1-2:ccc
2-3:ddd

sort 标签

sort 标签用来对一个可遍历对象里的元素进行排序.
在这里插入图片描述

<s:sort comparator="#request.comparator" source="#request.product2" var="product2"></s:sort>
<!--var放到域对象里面的key所对应的值-->
 <s:iterator value="#attr.product2" status="status" begin="1" end="3">
 <!--value取出值-->
  ${status.index}-${status.count}:${productName}<br>
 </s:iterator>

date 标签

date 标签用来对 Date 对象进行排版
在这里插入图片描述

<s:data name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2"/>
date:${date2}

a 标签

a 标签将呈现为一个 HTML 连接. 这个标签可以接受 HTML 语言中的 a 元素所能接受的所有属性.

 <s:iterator value="#request.product2" status="status" begin="1" end="3">
  <br>
  <s:a href="getName.action?productName=%{productName}">${productName}</s:a>
 </s:iterator>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值