Struts2的异常处理
Struts2的异常处理
1.异常处理机制(1)发送请求到控制器(Action);
(2)Action出现异常后,依照所捕捉的不同异常转入不同的视图资源。
2.异常捕捉
(1)在Action的处理逻辑中,手动捕捉异常,在捕捉到特定的异常后,返回指定的逻辑视图名,这种方式太繁琐不利于代码的修改和维护:
import com.opensymphony.xwork2.ActionSupport;
public class Test3Action extends ActionSupport{
//逻辑视图名
static final String ERROR_1 = "error1";
//封装一个请求参数
private String username;
//setter、getter方法
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return this.username;
}
//处理逻辑,在此处我们部直接抛出异常而是用try...catch的方式手动捕捉异常
//根据不同的异常返回不同的逻辑视图名
public String execute(){
try{
return SUCCESS;
}catch(Exception e){
return ERROR_1;
}
}
}
(2)声明式的异常捕捉:
Action的处理逻辑抛出所有的异常给Struts2框架,当Struts2框架接收到所抛出的异常后,根据在Struts.xml中配置的异常映射转入不同的物理视图资源。
这种异常处理是通过在Struts.xml中配置<exception-mapping>完成的,使用该元素需要指定两个属性:
exception:指定该异常映射所设置的异常类型;
result:指定Action出现异常时系统返回的逻辑视图名。
根据<exception-mapping>元素出现的位置不同,我们可以把异常分为两种:局部异常(在<action>中配置)和全局异常(在<global-exception-mapping>中配置),局部异常对该Action有效,而全局异常对所有Action有效,当全局异常和局部异常配置了同一个异常类型时,在此Action中局部异常会覆盖全局异常。
自定义两个异常类:
UserException:
package exception;
public class UserException extends Exception{
public UserException(){
}
public UserException(String msg){
super(msg);
}
}
ErrorException:
package exception;
public class ErrorException extends Exception{
public ErrorException(){
}
public ErrorException(String msg){
super(msg);
}
}
写一个抛出异常的Action:
import com.opensymphony.xwork2.Action;
import exception.ErrorException;
import exception.UserException;
public class Test4Action implements Action{ //封装请求参数 private String username; //setter、getter方法 public void setUsername(String username){ this.username = username; } public String getUsername(){ return this.username; } @Override public String execute() throws Exception { if(getUsername()==null){ throw new UserException("用户名不得为空"); }else if(!getUsername().equals("jiagoushi")){ throw new ErrorException("用户名错误"); }else{ return SUCCESS; } } }
在struts.xml中配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="package_a" extends="struts-default">
<!-- 定义一个全局结果 -->
<global-results>
<result name="errorException">errorException.jsp</result>
</global-results>
<!-- 定义一个全局异常 -->
<global-exception-mappings>
<!-- 当Action遇到ErrorException异常时,将转入到名为errorException的结果中 -->
<exception-mapping result="errorException" exception="exception.ErrorException"/>
</global-exception-mappings>
<action name="test1" class="testAction.Test1Action">
<result name="error">error.jsp</result>
<result>${name}.jsp</result>
</action>
<action name="test4" class="testAction.Test4Action">
<!-- 定义局部异常处理 -->
<exception-mapping result="userException" exception="exception.UserException"/>
<exception-mapping result="errorException" exception="exception.ErrorException"/>
<!-- 定义结果映射 -->
<result>welcome.jsp</result>
<result name="userException">userException.jsp</result>
<!-- 局部异常会覆盖全局异常 -->
<result name="errorException">errorException_test.jsp</result>
</action>
</package>
</struts>
3.异常信息的输出使用Struts2提供的标签可以用来输出异常信息:
<s:property value="exception">:输出异常对象;
<s:property value="exceptionStack">:输出异常堆栈信息。
Struts2的异常处理的更多相关文章
- 【struts2】Struts2的异常处理
在Action中execute方法声明为:public String execute() throws Exception,这样,Action可以抛出任何Exception. 1)自己实现异常处理 我 ...
- (十)struts2的异常处理机制
成熟的MVC框架应该提供成熟的异常处理机制.当然可以在方法中手动捕捉异常,当捕捉到特定异常时,返回特定逻辑视图名. 这种方式非常繁琐,需要在方法中写大量try catch块,最大的缺点还是一旦需要改变 ...
- struts2:异常处理
Struts2框架提供了自己的异常处理机制,只需要在struts.xml文件中配置异常处理即可,而不需要在Action方法中来捕捉异常. 传统方法 public String execute() th ...
- Struts2之异常处理
一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...
- java之struts2之异常处理
1.在应用项目中,异常的出现时很正常的.而且项目上线后发生异常也很正常的.那么需要对这些异常有相应的处理机制,以便客户能够看你到更加友好的界面.Struts2中提供了异常处理机制. 2.Struts中 ...
- 配置Struts2的异常处理
最好的方式是通过声明管理异常处理 1Action里面的execute()方法抛出所有异常:public String execute() throws Exception{} 2声明异常捕捉 ...
- SSH答疑解惑系列(三)——Struts2的异常处理
Struts2的异常采用声明式异常捕捉,具体通过拦截器来实现. 在项目中,我们可以在Action中直接抛出异常,剩下的就交给Struts2的拦截器来处理了.当然,我们需要进行相关配置. Struts2 ...
- Struts2全局异常处理
1.在struts.xml中配置全局异常处理 在Action中抛出异常,此异常可以是action自己抛的,也可以是Service抛出来的,都会跳转到全局异常中,只有在当前Action中配置域全局异常返 ...
- Struts2 语法--异常处理
1. UsersDAO.java里产生一个例外: System.out.println(1/0); 2. 调用DAO的UsersAction1.java 的execute方法, 加抛异常: publi ...
随机推荐
- EXTJS 5 开发环境搭建
WEBstrom eclipse下载: http://www.eclipse.org/downloads/ spket 下载: 安装方式: http://wangke0611.iteye.com/bl ...
- PHP漏洞全解(详细介绍)
转载 http://www.jb51.net/article/31898.htm 针对PHP的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval注入(E ...
- yii2添加自定义字段
在模型model文件中,添加 public $attributes;即可,$attributes 为要添加的新字段
- C++中关于无法解析的外部符号问题LNK2019问题的总结
网上一般有很全面的解决方法,最近恰好本道长也遇到了这种问题,也恰好解决了,这种问题应该算作配置问题,而非程序本身问题,多数是因为接手了生疏的程序导致,此问题看上去很简单,但木有经验的话很 ...
- 一个C#序列化时循环引用的问题
以前一直没搞懂为什么C#在做对象序列化时(Json序列化,XML序列化等)有时候会出现循环引用的问题,下面写了个例子,类People有一个属性引用了类Child,而类Child也有一个属性引用了类Pe ...
- oracle中清空表数据的两种方法
1.delete from t 2 .truncate table t 区别: 1.delete是dml操作:truncate是ddl操作,ddl隐式提交不能回滚 2.delete from t可以回 ...
- OpenStack fuel-web不可用解决办法
Contents [hide] 1 为增加一台计算节点 2 磁盘清空 3 启动占用8001端口的进程 4 启动占用5432端口的进程 为增加一台计算节点 打开fuel-web,发现无法打开,弹出ngi ...
- xUtils之ViewUtil
要使用xutils,首先要导入xutils类库. 其次要添加权限: <uses-permission android:name="android.permission.WRITE_EX ...
- rqnoj-342-最不听话的机器人-dp
dp[i][j][k][[l]: 执行第i步,执行到点(j,k),方向为l时,用的最大步数. 状态转移根据step[i]转移. #include<stdio.h> #include< ...
- Nginx防蜘蛛爬虫处理
假定一个场景:某个网站它可能不希望被网络爬虫抓取,例如测试环境不希望被抓取,以免对用户造成误导,那么需要在该网站中申明,本站不希望被抓取.有如下方法: 方法一:修改nginx.conf,禁止网络爬虫的 ...