struts2异常处理及类型转换

一.struts2对异常的处理

1.自定义局部异常:

<action>
<exception-mapping result="sonException" exception="java.lang.ArithmeticException"></exception-mapping>
</action>

2.自定义全局异常:

    <!-- 配置全局异常处理 -->
        <global-exception-mappings>
            <exception-mapping result="sonException" exception="java.lang.ArithmeticException"></exception-mapping>
        </global-exception-mappings>

3.异常执行的优先级

  >>当同时出现全局和局部异常时,局部异常优先,即局部异常优先于全局异常执行,如果全局和局部异常相同,那么将以局部异常为准.

    >>当异常出现父子关系时,子异常优先.如java.lang.ArithmeticException是java.lang.Exception的子类.如果同时进行配置的话,那么以java.lang.ArithmeticException为准.

如:

<!-- 配置全局异常处理 -->
        <global-exception-mappings>
        <exception-mapping result="sonException" exception="java.lang.ArithmeticException"></exception-mapping>
        <exception-mapping result="fatherException" exception="java.lang.Exception"></exception-mapping>
        </global-exception-mappings>

 

复制代码
    <!-- 配置全局结果处理 -->
        <global-results>
            <result name="success" type="dispatcher">
                /WEB-INF/success.jsp
            </result>
            <result name="sonException" type="dispatcher">
                /WEB-INF/sonException.jsp
            </result>
            <result name="fatherException" type="dispatcher"> 
                /WEB-INF/fatherException.jsp
            </result>
        </global-results>
复制代码

 

二.struts2中的类型转换

1、内置类型转换器

HTTP没有类型的概念,只能将表单的参数,以String或String[]的方式接收.

>>1).struts2提供了内置的类型转换器,它能将string类型和8种基本类型自动转换.

>>2).struts2的内置类型转换器,能将java.util.Date与String类型自动转换,但Date类型的字符串格式必须为yyyy-MM-dd的格式;同时struts2会自动检测日期的合法性,如01-33这种就不能通过.

>>3).内置转换器,不能将String类型转换成任意javaBean类型,这里需要使用自定义转换器.

下面以实例来演示:

Address.java

复制代码
package type;

/** 
* @ClassName: Address 
* @Description: 定义一个address model
* @author: amosli
* @email:amosli@infomorrow.com
* @date Jan 26, 2014 1:53:33 AM  
*/
public class Address {
    private String province;// 省份
    private String city;// 城市
    private String area;// 区域

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

}
复制代码

TypeAction.java

复制代码
package type;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

/** 
* @ClassName: TypeAction 
* @Description: 本类主要是讲解类型转换
* @author: amosli
* @email:amosli@infomorrow.com
* @date Jan 26, 2014 1:00:35 AM  
*/
public class TypeAction extends ActionSupport{
    private static final long serialVersionUID = -2558635842755603468L;
    private String username;//姓名
    private Integer age;//年龄
    private Float salary;//薪水
    private Date birthday;//生日
    private Address address;//地址
    
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Float getSalary() {
        return salary;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public void setSalary(Float salary) {
        this.salary = salary;
    }

    public String execute() throws Exception {
        
        
        return SUCCESS;
    }
    
    
}
复制代码

type_struts.xml

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="type" extends="struts-default">
        <action name="TypeAction" class="type.TypeAction" method="execute">
            <result name="success" type="dispatcher">
                /WEB-INF/type_success.jsp
            </result>
            <result name="input" type="dispatcher">
                type.jsp
            </result>
        </action>
    </package>
</struts>
复制代码

sturts.xml

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!--<include file="config/upload.xml"></include> -->
    <!-- 加载其他配置文件 -->
    <!-- <include file="config/upload-interceptor.xml"></include> -->
    <!-- 加载属性文件-国际化 -->
    <!-- <constant name="struts.custom.i18n.resources" value="message"></constant> -->    <!-- 结果集 -->
    <!-- <include file="config/result_struts.xml"></include> -->

    <!-- 类型转换 -->
    <include file="config/type_struts.xml"></include>

</struts>
复制代码

type.jsp

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <s:form action="TypeAction" type="POST">
        <s:textfield label="用户名" name="username" />
        <s:textfield label="年龄" name="age" />
        <s:textfield label="薪水" name="salary" />
        <s:textfield label="生日" name="birthday"/>
        <s:textfield label="地址" name="address"/>
        <s:submit name="submit"/>
    </s:form>
</body>
</html>
复制代码

type_success.jsp

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   恭喜,类型转换成功!
    <hr>
    用户名:<s:property value="username"/><br>
    年龄:<s:property value="age"/><br>
    薪水:<s:property value="salary"/><br>
    生日:<s:property value="birthday"/><br>
    地址:<s:property value="address"/><br>
</body>
</html>
复制代码

 

效果截图:

1),不填写地址

2),查看结果,基本类型的数据自动转换成功

3),填写地址

4),这里配置了result中的input,一时出错页面将转发到type.jsp,并使用标签自带的错误消息回显.

 

  

posted on 2014-01-27 10:30  锟斤拷锟斤拷  阅读(229)  评论(0编辑  收藏  举报

导航