Struts2的异常处理

Strust2的异常处理不同于我们在Java代码中的try{}catch{}语句,而是将异常放在struts.xml配置文件中了,下面我记录下学习Struts2的异常处理的知识点:

Struts2在配置文件中配置的异常主要包括局部异常和全局异常,下面分别说明。

一、配置全局异常:

如下面的struts.xml配置文件所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd" >

<struts>
	<package name="test" extends="struts-default">

		<global-results>
			<result name="usernameException">/usernameException.jsp</result>
		</global-results>

		<global-exception-mappings>
			<exception-mapping result="usernameException"
				exception="com.example.exception.UsernameException"></exception-mapping>
		</global-exception-mappings>

		<action name="login" class="com.example.action.LoginAction">
			<result name="success">/success.jsp</result>
		</action>

	</package>
</struts>
global-results标签中,定义了一个全局的结果,名为usernameException,对应的JSP页面为usernameException.jsp,该页面内容很简单,只显示”username exception“,下面又定义了一个global-exception-mappings,为全局的异常映射,其中指定了result为上面定义的usernameException,需要注意的是,上面的配置文件中,节点的顺序依次为global-results、global-exception-mappings、action,这个顺序不能乱,不然struts.xml文件会报错

定义好上面的配置文件后,我们要编写与usernameException对应的UsernameException类,该类继承了Exception类,代码如下:

package com.example.exception;

public class UsernameException extends Exception {

	private String msg;

	public UsernameException(String msg) {
		this.msg = msg;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

}
然后在LoginAction中,执行execute方法时,我们判断如果username为null或空字符串时,则抛出UsernameException,LoginAction的代码如下所示:

package com.example.action;

import com.example.exception.UsernameException;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	public String execute() throws Exception{
		if(username == null || "".equals(username)){
			throw new UsernameException("username should not be empty!");
		}
		ActionContext.getContext().getSession().put("username", username);
		return SUCCESS;
	}

	@Override
	public String toString() {
		return "LoginAction [username=" + username + ", password=" + password
				+ "]";
	}

}
二、配置局部异常

局部异常跟全局异常的不同之处在于,struts.xml配置文件中的异常信息的配置,放到action标签中了,下面是局部异常的struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd" >

<struts>
	<package name="test" extends="struts-default">

		<action name="login" class="com.example.action.LoginAction">
			<exception-mapping result="usernameException" exception="com.example.exception.UsernameException"></exception-mapping>
			<result name="success">/success.jsp</result>
			<result name="usernameException">/usernameException.jsp</result>
		</action>

		<action name="getBooks" class="com.example.action.GetBooksAction">
			<result name="input">/login.jsp</result>
			<result name="success">/showBooks.jsp</result>
		</action>

	</package>
</struts>
我们在浏览器中访问login.jsp后,username和password都不填,然后提交表单,会发现出现username exception页面,说明Struts2框架已经完成异常的处理,显示了usernameException.jsp页面




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yubo_725

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值