struts 1.1 exception handler 的应用

在 Struts 1.1 中,引入了新的异常处理机制,让我们可以通过配置文件(主要是struts-config.xml)来定制异常处理,就象定义formbean一样。

    下面,我们就来看看如何具体地运用这个新特性。

 

一、定制异常(在 struts-config.xml文件中定义)

 

     定制异常也有两种方法,姑且把它分为:“全局异常(Global Exceptions)”和“局部异常 (Local Exception)”。

       “全局异常”定义方法如下:

    <global-exceptions>

<exception key="struts.test.InvalidUserName"                        type="struts.test.InvalidiUserNameException"

scope="request"

Handler="org.apache.struts.action.ExceptionHandler"

path="error.jsp"/>           

</global-exceptions>

上述代码在struts-config.xml中定义了一个全局异常,它的作用是抛出InvalidiUserNameException(在这里的意思是当在添加用户的时候,发现该用户已经存在)异常的时候返回到error.jsp中,并且携带自定的比较规范的异常信息struts.test.InvalidUserName,struts.test.InvalidUserName可以在应用程序的资源配置文件中找到,如:

struts.test.InvalidUserName =重复注册用户!

局部异常,定义方法如下:

<action-mappings>

       <action path="/userLogonAction"

                     type="struts.test.UserLogonAction"

                     name="userLogonForm">

              <exception key="struts.test.InvalidUserName"

type="struts.test.InvalidiUserNameException"

Handler="org.apache.struts.action.ExceptionHandler"

 

path="/error.jsp"/>

             <forward name="success" path="/index.jsp"/>

        </action>

</action-mappings>

关于异常在 Struts 1.1 中 Struts-config.xml 的定义就这么简单。

二、实现我们的异常类(struts.test.InvalidiUserNameException)

 

为了实现 struts.test.InvalidiUserNameException 这个异常,我们必须自己编写一个继承于 Exception 的异常:InvalidiUserNameException。

File name : InvalidiUserNameException.java

package struts.test;

 public class InvalidiUserNameException extends Exception

{

       public InvalidiUserNameException ()

       {

           super();

      }

}

 

 三、一个抛出异常的Action

 

 

我们假设下面这个异常将会抛出 struts.test.InvalidiUserNameException :

 

public class UserLogonAction extends BaseAction {

              public ActionForward execute(ActionMapping mapping,

                                                               ActionForm form,sp;        HttpServletRequest request,

 

                                                               HttpServletResponse response)throws Exception {

                     throw new struts.test.InvalidiUserNameException ();

                }

}

 

四、显示我们的异常信息

为了显示我们的友好错误提示信息,我们可以编写一个error.jsp 文件,内容如下:

error.jsp 

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
 
<html:html locale="true">
<head>
    <title>Struts 1.1 Exception Handler Demo</title>
    <html:base />
  </head>
  <body>
    <h1>系统出现一个意外</h1>
    请将下面的提示信息反馈给你的系统管理员:<br>
    <html:errors />   <!--将在这里显示”重复注册用户!”-->
        </body>
</html:html>

 五、出现我们的异常

好了,我们可以看到我们的异常了。当执行到上面的 Action 的时候,程序将会抛出InvalidiUserNameException ,而 struts1.1的 Exception Handler 将会捕捉这个异常,并在 struts-config.xml寻找匹配的异常定义信息,最终转到error.jsp并且显示了我们定义的错误信息:

 

重复注册用户!

 

 以上的代码只是从整体上介绍了如何使用 Struts 1.1 的异常处理机制,在我们具体的实现中,我们可以在 DAO/Oper 层抛出异常,并不需要在 Action 层抛出。

 所以,我们定制的异常在程序中并不需要用try/catch来捕获,一旦出现了我们已经定义的异常那么就会转到相应的页面,并且显示相应定制的信息。

我们上面是使用 Struts 默认的异常处理 Handler org.apache.struts.action. ExceptionHandler  来处理的。

我们也可以定义自己的处理方式,只要继承它并实现其中的execute方法,这个方法在 ExceptionHandler 的定义如下:

    public ActionForward execute(Exception ex,

 

                                 ExceptionConfig ae,

                                 ActionMapping mapping,

                                 ActionForm formInstance,

                                 HttpServletRequest request,

                                 HttpServletResponse response)

        throws ServletException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 和 Struts 都是基于MVC架构的Web框架,但是它们的实现方式有所不同。在 Struts 中,使用 action 来处理请求,而在 Spring MVC 中则使用 handler mapping。 在 Spring MVC 中,handler mapping 是一个重要的组件,用于将请求映射到相应的处理程序。Handler mapping 可以根据请求的 URL、参数、请求头等信息来确定应该调用哪个处理程序来处理请求。 在处理 Struts action 时,可以通过自定义一个 HandlerMapping 来将 Struts action 映射到 Spring MVC 的处理程序中。具体实现方法如下: 1. 创建一个自定义的 HandlerMapping 类,并实现 Spring 的 HandlerMapping 接口。 2. 在自定义的 HandlerMapping 类中,重写 determineHandler 方法,根据请求中的 action 名称来确定应该调用哪个 Spring MVC 的处理程序。 3. 将自定义的 HandlerMapping 配置到 Spring MVC 的配置文件中。 示例代码如下: ```java public class StrutsActionHandlerMapping implements HandlerMapping { @Override public Object getHandler(HttpServletRequest request) throws Exception { String actionName = request.getParameter("action"); if ("login".equals(actionName)) { return new LoginController(); } else if ("register".equals(actionName)) { return new RegisterController(); } return null; } } ``` 在配置文件中,需要将自定义的 HandlerMapping 添加到 Spring MVC 的处理程序映射器中: ```xml <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="order" value="0" /> <property name="interceptors"> <list> <ref bean="localeChangeInterceptor" /> </list> </property> </bean> <bean id="strutsActionHandlerMapping" class="com.example.StrutsActionHandlerMapping" /> <bean id="loginController" class="com.example.LoginController" /> <bean id="registerController" class="com.example.RegisterController" /> <bean name="/index.jsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 在上面的配置中,首先配置了一个默认的 BeanNameUrlHandlerMapping,然后将自定义的 StrutsActionHandlerMapping 添加到处理程序映射器中。同时,还配置了 LoginController 和 RegisterController 的 Bean。最后,配置了一个视图解析器,用于解析 JSP 视图。 这样,当请求的 action 为 login 时,就会调用 LoginController 进行处理;当请求的 action 为 register 时,就会调用 RegisterController 进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值