一.处理异常的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>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huoqubing/archive/2009/07/06/4324214.aspx
在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>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huoqubing/archive/2009/07/06/4324214.aspx