struts global-exceptions

   一.处理异常的exception和global-exception
   在Web应用中,对异常处理位置都是业务逻辑失败的信息.因为异常处理还需要编写ActionErrors,给出报错信息将导致在Action会看到许多的ActionErrors的代码.
   struts解决了这个问题,它允许程序员配置任何异常,并且在将异常转化为报错信息的时候,不必须自行使用"try catch"来捕捉,写报错转发到出错页面.
   1.局部异常
      就是针对一个Action响应所抛出的异常,该异常将只负责Action的程序段,并且自定义在<action>元素中.

   局部异常的定义:
  <action-mapping>
   <action
      input="SampleJsp.jsp" 指定了SampleForm对象使用的ActionForrm对象名称,与form-bean元素定义的name属性一致
      name="SampleForm"  指定了SampleForm对象使用的ActionForm对象名称
      path="/SampleAction" 如果使用了SampleForm.do的响应,那么ActionServlet控制器组件就会自动找到本Action对象
      scope="request"   使用ActionForm的范围
      type="struts.sample.cap3.sample1.action.SampleAction"  解释本Action对象的路俓
      validate="false">   定义使用的ActionForm在Action是否需要检验
      <expetion
      key="userNameException"  指定了在资源配置文件中报错信息的键
      path="/SampleJsp.jsp"   指定了报错之后所转发到的JSP页面,在该页面中可以通过标签库来读取报错信息,并显示
      type="struts.sample.cap3.sample1.exception.UserNameException"/> 指定了该异常类的java实体名
      <exception
       key="SampleJsp.jsp"
       type="java.sql.SQLException"/>
     </action>
      </action-mappings>

 2.全局异常
       指对所有定义在Struts-config.xml的Action程序都进行处理,他定义在<global-exception>元素中
     <global-exception>
     <exception
     key="passWordException.jsp"
     path="SampleJsp.jsp"
     type="struts.sample.cap3.sample.exception.passWordException"/>
    <global-exception>
     定义全局变量时无需将<exception>元素作为任何<action>元素的子元素,而是直接作为 <global-exception>的子元素.

  简单示例:
  (1).自定义标签类
      UserNameException.java

package struts.sample.cap3.sample1.exception;
public class UserNameException extends Exception {
  public UserNameException(){
   super();
  }
  public UserNameException(String message){
   super();
  }
  public UserNameException(String message,Throwable cause){
   super(message,cause);
  }
  public UserNameException(Throwable cause){
   super(cause);
  }
  public UserNameException(Exception exc){
   super(exc);
  }

}


(2)业务逻辑类
UserNameService.java

package struts.sample.cap3.sample1.service
 import struts.sample.cap3.sample1.exception.UserNameException;
 import struts.sample.cap3.sample1.exception.UserNameException2;
public class UserNameService {
 public void UserNameLogic() throws UserNameException{
  throw new UserNameException("UserName");
 }

}


(3)Action类
SampleAction.java

 

package struts.sample.cap3.sample1.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import struts.sample.cap3.sample1.exception.UserNameException;
import struts.sample.cap3.sample1.service.UserNameService;
public class SampleAction extends Action{
  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception{
   UserNameService userNameService=new UserNameService();
   return  null;
  }

}


 (4)资源配置文件
application.properties
userNameException=用户名无法确定
XXX=XXX
....

(5)JSP页面

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page language="java"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<html>
<head><title>JSP for SampleForm</title>
</head>
<body>
<html:errors/><p/>
<html:form action="SampleAction.do">
userName : <html:text property="userName"/><br/>
password : <html:password property="password"/><br/>
sex: <html:select property="sex">
    <html:option key="F" value="F"/>
    <html:option key="M" value="M"/>
     </html:select><br/>
     age : <html:text property="age"/><br/>
     email : <html:text property="email"/><br/>
     <html:submit/><html:cacel/>
     </html:form>
</body>
</html>

[http://www.blogjava.net/microlab4321/articles/147444.html]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值