我们还是以登录的例子来做介绍吧,先设计好前端页面如下图所示:
login.jsp.png
然后自定义两个异常:
UsernameException.png
PasswordException.png
编写LoginAction代码:
LoginAction.png
这里要说明的是,不是所有的验证都放入validate块中的,validate块中只进行没有业务逻辑的验证,例如:用户名长度、用户名是否为空、密码长度等,而含有业务逻辑的验证还是需要放到execute方法中的
接着编写struts.xml文件:
struts.xml.png
其中涉及到的4个jsp文件如下:
g_username_err.jsp.png
g_pwd_err.jsp.png
username_err.jsp.png
pwd_err.jsp.png
测试例子1:
依次输入zhangsan、1234,如下图所示:
test_1.png
点击登录后返回结果如下:
test_1_ret.png
测试例子2:
依次输入123456、12,如下图所示:
test_2.png
点击登录后,返回结果如下图所示:
test_2_ret.png
根据上述两个测试结果可以判断出:
全局result没有其作用,换言之局部result其作用了,那么对于全局异常与局部异常到底谁会其作用呢?这里就不在展示了,直接说出答案,局部异常会起作用
总结:
对于这个结果而言,我们只需要记住一点原则就可以了即:局部始终优于全局
struts2提供了一个比较好的异常机制,当发生某个异常的时候,让开发者决定往哪里跳转,而不是显示Tomcat堆栈信息
全局异常其实和全局变量类似,把大多数Action会出现的异常情况提取出来,这样就不用在每个Action中重复配置该异常以及result了