声明式的异常处理

         Exception-mapping 元素:配置当前action的声明式异常处理

         Exception-mapping元素中有两个属性

         -exception:制定需要捕获的异常类型 ,异常的全类名

         -result:指定一个响应结果,该结果将在捕获到指定异常时被执行,即可以来自当前的action声明,也可以来自global-results声明。

可以通过global-exception-mappings元素为应用程序提供一个全局性的异常捕获映射 ,但在global-exception-mappings元素下声明的任何exception-mapping元素只能引用在global-results元素下声明的某个result元素

 

 

声明式异常处理机制由 ExceptionMappingInterceptor 拦截器负责处理,当某个exception-mapping元素声明的异常被捕获到时,ExceptionMappingInterceptor拦截器就会向ValueStack中添加两个对象 ,

         Exception:表示被捕获异常的Exception对象

         ExceptionStack :包含着被捕获的异常栈

可以在试图上通过<s:property>标签显示异常消息

 

 

 

Struts2 自动把Action对象 放入值栈中,

放入的时间点为:Struts2终将调用Action类的Action方法,但在调用该方法之前 ,:

先创建一个StrutsActionProxy对象

在创建StrutsActionProxy之后,对其进行初始化时,把Action对象放入了值栈中。

 

S:property :打印值栈中的属性值的:

         对于对象栈,打印值栈中对应的属性值

<s:property value=”productName”/>

         对于Map栈,打印 request,session .application . 或者某个请求参数的值

<%

         Session.setAttribute(“”,””);

%>

<s:property value=”#session.date”/>

//获得请求参数的值 获得的是一个数组 ,所以这样调用

<S:property value=”#parameters.name[0]” />

 

S:rul创建一个URL 字符串的方式:手动方式创建

 

<s:url value=”/getProduct” var = “url”>

指定url包含的请求参数,2002不可能是一个属性名,struts2直接把2002直接作为属性值

         <s:param name=”productId” value=”1001”></s:param>

</s:url> 把这个rul放在域对象里面

${ url }

打印结果为

/struts2-4/getProduct?productId=1001

如果希望value 是值栈中的对象的属性

动态创建URL

<s:url value=”/getProduct” var = “url”>

         对于value值会自动的进行OGNL解析,强制的进行OGNL解析

         <s:param name=”productId” value=”productId”></s:param>

         <s:param name=”date” value=”#session.date”></s:param>

</s:url> 把这个rul放在域对象里面

${ url }

 

 

如果不希望进行OGNL解析希望它就是个字符串

<s:url value=”/getProduct” var = “url”>

         对于value值会自动的进行OGNL解析,若不希望进行OGNL解析则使用单引号引起来

         <s:param name=”productId” value=” ‘productId’ ”></s:param>

</s:url> 把这个rul放在域对象里面

${ url }

 

构建一个请求action的字符串地址

<s:url action=”testAction” namespace=”helloworld” method=”save” var=”url4”></s:property>

${url4 }

打印结果是

/struts2-4/helloworld/testAction!save.action

如果要通过这个方式进行访问 ,则需要先打开struts2的某个参数

 

 

这个url地址只包含get请求的请求参数  includeParams 可以是get, all,null

(在一个页面输入参数 ,经过action转发到另一个页面(页面中包含这个标签)因为是转发所以会得到这些请求参数)

<s:url value=”testUrl” var = “url5” includeParams=”get”></s:url>

<${url5}

 

 

OGNL会强制的对value属性值进行解析 ,如果不希望进行解析的话 ,我们可以使用单引号

也可以把value属性的值写在开始标签和结束标签之间,利用这种方式可以来传递一个EL表达式的值

 

 

 

 

S:set :向page,request ,session ,application 域对象中加入一个属性值

对value属性值 自动的进行OGNL解析

<s:set name=”productName” value=”pruductName”  scope=”request”></s:set>

 

productName:${requestScope.productName}

 

 

s:push : 把一个对象在标签开始后把对象压入到值栈中 ,标签结束后,弹出值栈

<%

         Person person = new Person();

         Person.setName(“atguigu”);

         Person.setAge(10);

         Request.setAttribute(“person” ,person);

 

%>

 

<s:push value=”#request.person”>

         <s:property value=”name”/>或者使用

         ${name}

</s:push>

 

 

 

S:if , s:else  ,  s: elseif

直接使用值栈中的属性

<s:if test=”productPrice>1000”>

         I7处理器

</s:if>

<s:elseif test=”productPrice > 800”>

         I5处理器

</s:elseif>

<s:else>

         I3处理器

</s:else>

 

<s:if test=”#request.person.age > 10”>

         大于10岁

</s:if>

<s:else>

         小于等于10岁

</s:else>

 

 

开始直行时,iterator标签会把IteratorStatuslei

S:iterator:遍历集合的,它会把可遍历对象里的每一个元素一次压入和弹出

<%@page import = “java.util.List” %>

<%@page import = “java.util.ArrayList” %>

<%

         List<Person> persons = new ArrayList<Person>();

Persons.add(new Person(“AA”,10))

Persons.add(new Person(“BB”,20))

Persons.add(new Person(“CC”,30))

Persons.add(new Person(“DD”,40));

Request.setAttribute(“persons”,persons);

%>

 

 

可以有status来制定状态有index count , first , last , 等状态  把status放在了对象里 所以写的话 像这么写

<s:iterator value=”#request.persons”  status=”status”>

         Index: ${status.index}- count:${status.count}    ${name}  -  ${age }<br/>

</s:iterator>

 

 

S:sort 标签:

import java.util.Comparator;

 

public class PersonComparator implements Comparator<Person> {

    public int compare(Person o1, Person o2) {

       return o1.getName().compareTo(o2.getName());

    }

}

 

Common-tags.jsp

  <body>

    s:sort 可以对集合中的元素进行排序

    <br/>

    <br/>

    之前Comparator需要放在一个位置

    <%

       PersonComparator pc = new PersonComparator();

       request.setAttribute("comparator",pc);

    %>

    <!-- var指的是放大域对象中的key的值 -->

    <s:sort comparator="#request.comparator" source="persons" var="persons">

       <s:iterator value="#attr.persons">

           ${name } - ${age }<br/>

       </s:iterator>

    </s:sort>

  </body>

S:date 可以对 Date对象进行排版,将var后面的变量放入域对象中

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

    date:${date2 }

struts2标签

<s:iterator value="persons">

<!--

可以使用%{}把属性包装起来 使其进行强制OGNL解析 struts2标签元素中不能有

    EL表达式标签但可以用%{}进行强转

-->

    <s:a href="getPerson.action?name=%{name}">${name}</s:a>

</s:iterator>