structs中exception得处理

原创 2007年09月27日 21:41:00
昨天用了两种方法来实现Structs抛出异常,并且做界面转发.
两种方法各有好处.
1.用structs自定义得类org.apache.struts.util.ModuleException来做.
----------------------------------------------------------------
struct-config.xml中的设置
<action-mappings>
<action path="/login"
   type="com.maesinfo.carmen.framework.security.LoginAction"
   scope="request" name="loginForm" validate="true"
   input="/login.jsp">
   <forward name="Success" path="/success.jsp" />
   <forward name="Failure" path="/login.jsp" redirect="true" />
  </action>
<action-mappings>
<global-exceptions>
  <exception key="global.error.invalidlogin" path="/login.jsp"
   scope="request"
   type="org.apache.struts.util.ModuleException"/>
 </global-exceptions>
 <message-resources
  parameter="com.maesinfo.carmen.struts.ApplicationResources" />
------------------------------------------------------------------
 properties中得设置:
 global.error.invalidlogin = 登入失败!请重新登入.
------------------------------------------------------------------
Action中得设置:
try {
  customer = serviceImpl.authenticate(user);
 } catch(BaseException be){
     throw new ModuleException("global.error.invalidlogin");
  }
在catch BaseException 得时候抛出ModuleException让struct中得
org.apache.struts.util.ModuleException捕获.最后得到
exception key="global.error.invalidlogin" 转发给longin.jsp

2.自己做类得Handler来捕获
----------------------------------------------------------------
struct-config.xml中的设置
<action-mappings>
  <action path="/login"
   type="com.maesinfo.carmen.framework.security.LoginAction"
   scope="request" name="loginForm" validate="true"
   input="/login.jsp">
   <exception key="global.error.invalidlogin" path="/login.jsp"
    handler="com.maesinfo.carmen.framework.exceptions.InvalidLoginExceptionHandler" 
    type="com.maesinfo.carmen.framework.exceptions.InvalidLoginException" />
   <forward name="Success" path="/success.jsp" />
   <forward name="Failure" path="/login.jsp" redirect="true" />
  </action>
 </action-mappings>
 ----------------------------------------------------------------
InvalidLoginExceptionHandler:

package com.maesinfo.carmen.framework.exceptions;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ExceptionHandler;
import org.apache.struts.config.ExceptionConfig;
public class InvalidLoginExceptionHandler extends ExceptionHandler {
 public ActionForward execute(Exception ex, ExceptionConfig config,
   ActionMapping mapping, ActionForm formInstance,
   HttpServletRequest request, HttpServletResponse response)
   throws ServletException {
  ActionMessages errors = new ActionMessages();
  ActionForward forward = null;
  ActionMessage error = null;
  String property = null;
  /*
   * Get the path for the forward either from the exception element or
   * from the input attribute.
   */
  String path = null;
  if (config.getPath() != null) {
   path = config.getPath();
  } else {
   path = mapping.getInput();
  }
  // Construct the forward object
  forward = new ActionForward(path);
  if (ex instanceof InvalidLoginException) {
   processInvalidLoginException((InvalidLoginException) ex, config,
     request, forward, property, errors);
   List exceptions = ((InvalidLoginException) ex).getExceptions();
   if (exceptions != null && !exceptions.isEmpty()) {
    int size = exceptions.size();
    Iterator iter = exceptions.iterator();
    while (iter.hasNext()) {
     // All subexceptions must be InvalidLoginException
     InvalidLoginException subException = (InvalidLoginException) iter.next();
     processInvalidLoginException(subException, config, request,
       forward, property, errors);
    }
   }
  } else {
   error = new ActionMessage(config.getKey());
   property = error.getKey();
   storeException(request, property, error, forward,
     config.getScope(), errors);
  }
  return forward;
 }
  private void processInvalidLoginException(InvalidLoginException ex,
   ExceptionConfig config, HttpServletRequest request,
   ActionForward forward, String property, ActionMessages errors) {
  String messageKey = ex.getMessageKey();
  ActionMessage error = null;
  Object[] exArgs = ex.getMessageArgs();
  if (exArgs != null && exArgs.length > 0) {
   // If there were args provided, use them in the ActionError
   error = new ActionMessage(messageKey, exArgs);
  } else {
   // Create an ActionError without any arguments
   error = new ActionMessage(messageKey);
  }
  storeException(request, property, error, forward, config.getScope(),
    errors);

 }
 protected void storeException(HttpServletRequest request, String property,
   ActionMessage error, ActionForward forward, String scope,
   ActionMessages errors) {
  errors.add(property, error);
  if ("request".equals(scope)) {
   request.setAttribute(Globals.ERROR_KEY, errors);
  } else {
   request.getSession().setAttribute(Globals.ERROR_KEY, errors);
  }
 }
}
 -----------------------------------------------------
 Action中不做任何得catch操作:
 customer = serviceImpl.authenticate(user);
 --------------------------------------------------------
 在service中:调用一下方法:
 public User authenticate(User user)  throws InvalidLoginException,DatastoreException {
  List results  = DaoFactory.getUserDao().findByExample(user);
  if(results.isEmpty()) {
   System.out.println("InvalidLoginException出错");
        InvalidLoginException ie = new InvalidLoginException() ;
        ie.setMessageKey("global.error.invalidlogin");
        throw ie;
       }
  return (User)results.iterator().next(); 
 }
-----------------------------------------------------------------------
实现得效果同上边第一种方法一样.

REST(Jersey实现)统一异常机制

一:异常分类  (1)Throwable类是所有异常的始祖,它有两个直接子类Error / Exception:   Error仅在Java虚拟机中发生动态连接失败或其它的定位失败的时候抛出一个Err...
  • u013628152
  • u013628152
  • 2015年01月13日 15:49
  • 2866

Java异常处理

如果一个用户在运行程序期间,由于程序的
  • itzyjr
  • itzyjr
  • 2014年06月03日 22:28
  • 1280

构造函数的异常处理

试分析推断下述代码的输出结果:#include #include #include using namespace std; void* operator new(size_t size) {...
  • u014161864
  • u014161864
  • 2015年03月02日 10:32
  • 4910

Structs是典型的MVC框架实现

来源: Structs是典型的MVC框架实现,它以JSP和Servlet作为实现的一部分。Structs的MVC的框架如下 视图(View):展示逻辑,主要就是页面展示,可以理解为...
  • xiaodanjava
  • xiaodanjava
  • 2014年06月19日 16:41
  • 2146

java异常处理

版权声明:原创不易,转载请注明转自Error Handling with Exceptions异常恢复是提高鲁棒性最重要的方法。前言:这篇文章是我自己的笔记,基本上是我翻译的《Thinking in ...
  • weewqrer
  • weewqrer
  • 2016年07月14日 21:44
  • 1775

IOS异常处理(转)

好久好久没有写博客了,说实话吧,一个是因为忙,但更重要的是冬眠了,感觉,懒的写了。但是,这脑子吧,实在是不好使,记不住东西,所以,还是通过博客记录下,以后吧,一定要常常更新,算是给2013结一个好尾,...
  • ios_che
  • ios_che
  • 2014年03月24日 17:40
  • 4517

Android自定义异常处理

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了...
  • guoxiaolongonly
  • guoxiaolongonly
  • 2016年01月20日 15:59
  • 1891

Django REST 异常处理

异常异常处理…允许错误处理在程序结构的中心或者高层级的地方被清晰有条理的组织起来。 Exceptions… allow error handling to be organized cleanl...
  • ysjian_pingcx
  • ysjian_pingcx
  • 2016年03月30日 15:52
  • 3143

throw、try块和异常处理总结

标准库异常类定义在四个头文件中: 1、exception头文件中定义了最常见的异常类,类名是exception,这个类只通知异常的产生,不会提供更多的信息 2、stdexcept头文件中定义了以下...
  • zhang2008rongping
  • zhang2008rongping
  • 2015年04月18日 22:24
  • 680

Spring的事务处理机制及JAVA异常

在java中,异常分为两种,运行时异常(也就是uncheckException)和已检查异常checkException,运行时异常包括平常遇到的各种异常,如空指针异常,数据格式异常等一系列异常,这种...
  • zhousenshan
  • zhousenshan
  • 2016年02月23日 18:56
  • 834
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:structs中exception得处理
举报原因:
原因补充:

(最多只允许输入30个字)