zoukankan      html  css  js  c++  java
  • java 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;
        }
    
    }
    View Code

     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;
        }
        
        
    }
    View Code

    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>
    View Code

    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>
    View Code

    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>
    View Code

    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>
    View Code

    效果截图:

    1),不填写地址

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

     3),填写地址

     

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

     

      

  • 相关阅读:
    IDEA使用 磨刀霍霍向代码
    如何设计一个高可用系统?要考虑哪些地方?
    spring boot 集成apollo 快速指南
    实战_Spring_Cloud
    Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率
    「newbee-mall新蜂商城开源啦」1000 Star Get !仓库Star数破千!记录一下
    一个C#开发者重温Java的心路历程
    BeanUtils 如何拷贝 List?
    JVM之JVM的体系结构
    python类中的私有方法
  • 原文地址:https://www.cnblogs.com/amosli/p/3530577.html
Copyright © 2011-2022 走看看