WEB异常处理
传统的web编程的异常模式
try{
业务代码
}catch(XxxxException){
forward(“/a.jsp”);
}
…
Action处理
- 正常执行结束
1、返回一个String类型的逻辑视图
2、对于String类型的逻辑视图,使用
<result name="逻辑视图">物理视图</result>
- 出现异常
1、返回一个异常对象
2、使用
<exception-mapping exception="exception-class" result="逻辑视图" />
- 输出异常信息
<s:property value="exception.message" />
<s:property value="exceptionStack" />
struts2的异常配置的本质
为不同的异常类,命名一个逻辑视图,有两种:局部和全局异常
- 局部异常
<action>
<exception-mapping result="sql" exception="java.sql.SQLException(全限定异常类)" />
<result name="sql">...</result>
<exception-mapping result="illegal" exception="java.lang.IllegalArgumentException" />
<result name="illegal">...</result>
<result>....</result>
......
</action>
在会抛出异常的Action类对应的配置文件中添加exception与result的映射关系
- 全局异常
<!--全局result要在全局异常之前 -->
<global-results>
<result name="null">....</result>
....
</global-results>
<global-exception-mappings>
<exception-mapping result="null" exception="java.lang.NullPointException" />
<exception-mapping result="unkown" exception="java.lang.Exception" />
</global-exception-mappings>
实例
- jsp
<s:form action="loginPro">
<s:textfield name="name" label="username" />
<s:textfield name="pass" label="password" />
<s:submit value="submit">
</s:form>
- action
public String execute() throws Exception {
if(username.length() == 0){
throw new IllegalArgumentException("用户名不能为空。");
}
if(username.equalsIgnoreCase("sql")){
throw new SQLException("用户名不能为sql的同形体。");
}
if(username.equals("struts") && pass.equals("123456")){
setTip("欢迎你," + username + "!");
return SUCCESS;
}else{
setTip("登陆失败!");
return ERROR;
}
}
struts2设计的处理方法不需要处理任何异常,它可以声明抛出任何异常
<!--
配置异常映射的本质,就是为处理方法所抛出的异常类,起个名字
-->
<!--
全局异常配置
-->
<global-results>
<result name="illegal">
/WEB-INF/content/exception.jsp
</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="illegal" exception="java.lang.IllegalArgumentException"/>
</global-exception-mappings>
<action name="loginAction" class="org.struts.action.Login">
<!--
局部异常配置
-->
<exception-mapping result="sql" exception="java.sql.SQLException" />
<result name="sql">
/WEB-INF/content/exception.jsp
</result>
<result name="success" >
/WEB-INF/content/status.jsp
</result>
<result name="error" >
/WEB-INF/content/status.jsp
</result>
</action>
时间: 2024-08-27 13:04:40