Struts提供了一种更简单的方法来处理未捕获的异常,并将用户重定向到专门的错误页面。你可以很轻松地配置Struts为不同的异常显示不同的错误页面。
Struts通过使用“exception”拦截器来使异常处理变得简单。“exception”拦截器被作为默认堆栈的一部分包含其中,所以你不必对它做任何额外的配置。它提供开箱即用的功能可供使用。让我们看一个简单的Hello World示例,在 HelloWorldAction.java 文件中进行一些修改。在这里我们有意的给 HelloWorldAction 操作代码中引入一个 NullPointer 异常。

package cn.w3cschool.struts2;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport{private String name;public String execute(){String x = null;x = x.substring(0);return SUCCESS;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

让我们保持HelloWorld.jsp的内容如下:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>Hello World, <s:property value="name"/>
</body>
</html>

以下是index.jsp的内容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body><h1>Hello World From Struts2</h1><form action="hello"><label for="name">Please enter your name</label><br/><input type="text" name="name"/><input type="submit" value="Say Hello"/></form>
</body>
</html>

你的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>
<constant name="struts.devMode" value="true" /><package name="helloworld" extends="struts-default"><action name="hello" class="cn.w3cschool.struts2.HelloWorldAction" method="execute"><result name="success">/HelloWorld.jsp</result></action></package>
</struts>

现在右键单击项目名称,然后单击“Export”>“WAR File”创建WAR文件。然后在Tomcat的webapps目录中部署这个WAR文件。最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。将显示如下页面:

输入值“Struts2”并提交页面。你应该看到以下页面:

如上面的例子所示,默认exception拦截器处理异常的工作非常好。现在让我们为异常创建一个专门的错误页面,一个名为Error.jsp的文件,包含以下内容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>This is my custom error page
</body>
</html>

现在,让我们配置Struts在异常情况下使用此错误页面,修改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>
<constant name="struts.devMode" value="true" /><package name="helloworld" extends="struts-default"><action name="hello" class="cn.w3cschool.struts2.HelloWorldAction" method="execute"><exception-mapping exception="java.lang.NullPointerException"result="error" /><result name="success">/HelloWorld.jsp</result><result name="error">/Error.jsp</result></action></package>
</struts>

如上面的例子所示,现在我们已经配置Struts为NullPointerException使用专门的Error.jsp。如果现在重新运行程序,将看到以下输出页面:

除此之外,Struts2框架还带有一个“logging”拦截器来记录异常。通过启用记录器记录未捕获的异常,我们可以轻松地查看堆栈跟踪记录,并找出哪里出错了。

全局异常映射

我们已经看到了如何处理特定于action的异常。现在,我们可以设置一个全局异常,这将应用于所有的action。例如,为了捕获相同的NullPointerException异常,我们可以在<package...>标签中添加<global-exception-mappings...>标签,并在struts.xml文件的<action...>标签中添加<result...>标签,如下:

<?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>
<constant name="struts.devMode" value="true" /><package name="helloworld" extends="struts-default"><global-exception-mappings><exception-mapping exception="java.lang.NullPointerException"result="error" /></global-exception-mappings><action name="hello" class="cn.w3cschool.struts2.HelloWorldAction" method="execute"><result name="success">/HelloWorld.jsp</result><result name="error">/Error.jsp</result></action></package>
</struts>

Struts2 异常处理相关推荐

  1. struts2异常处理,global-results定义全局结果处理

    struts2异常处理,global-results定义全局结果处理 参考文章: (1)struts2异常处理,global-results定义全局结果处理 (2)https://www.cnblog ...

  2. struts2异常处理流程_Struts2异常处理示例教程

    struts2异常处理流程 Exceptions are common in any application. We try to catch it and process it but someti ...

  3. Struts2 异常处理机制

    原创 Struts2 异常处理机制 2012-05-10 15:42:28 TIANYU 阅读数 6791更多 分类专栏: struts 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...

  4. Struts2异常处理机制

    任何成熟的MVC框架都应该提供成就的异常处理机制,Strut2也不例外.Struts2提供了一种声明式的异常处理方式,Struts2也是通过配置的拦截器来实现异常处理机制的. 一.  异常处理机制 1 ...

  5. struts2异常处理

    java1234官网 在sstruts2里面配置自己的异常处理 1 <exception-mapping result="error" exception="jav ...

  6. Struts2 - 异常处理: exception-mapping 元素

    异常处理: exception-mapping 元素 在action方法中添加 int i=1/0; 请求action后,结果为: 在struts.xml中添加异常处理:exception-mappi ...

  7. Struts2学习入门

    Struts 2 教程 Apache的Struts2是一个优雅的,可扩展的框架,用于创建企业准备的Java Web应用程序.该框架旨在简化整个开发周期,从构建,部署,维护应用程序随着时间的推移. Ap ...

  8. Struts 学习笔记2(输入校验、国际化、异常处理)

    项目文件结构 项目源文件下载地址:http://dl.dbank.com/c05qyg3yir Struts2的输入校验 Struts2输入校验.执行流程: 1)首先进行类型转换 2)然后进行输入校验 ...

  9. Struts2 + Hibernate + Spring 以及javaweb模块问题解决(1)

    Struts2 + Hibernate + Spring 以及javaweb模块问题解决 1.资源文件的配置:src文件夹里面要配置,action所在的目录中也要配置. 2.<s: action ...

最新文章

  1. 计算机二级python用什么书-计算机二级Python考试有什么学习资料?
  2. Seq2Seq中Exposure Bias现象的浅析与对策
  3. C#中线程的使用[Thread in C#]
  4. 数值方法:偏微分方程
  5. 搜索引擎蜘蛛爬虫原理
  6. canvas生成二维码(2)
  7. MySQL 在 Mac 环境下的安装
  8. GNS3+winPcap+wireshark的安装步骤
  9. wps怎么删除空白页?你学会了吗?
  10. 计算机网络毕业设计选题背景,毕业设计论文选题依据与背景
  11. SageMath的使用
  12. 大型网站技术架构核心原理与案例分析(李智慧)学习笔记2--大型网站架构五大核心要素
  13. latex脚注标号混合数字和特殊字符
  14. NLP经典论文:Sequence to Sequence、Encoder-Decoder 、GRU 笔记
  15. UTF-8、en_US.UTF-8和zh_CN.UTF-8的区别
  16. 微信旧岛小程序章节目录
  17. php去除编辑器html标签,js处理富文本编辑器转义、去除转义、去除HTML标签
  18. vivos9设置繁体语言方法分享
  19. c语言中f1是什么意思啊,F1知识科普,这些字母代表什么你知道吗?
  20. 使用每篇等工具进行图文编辑

热门文章

  1. 简单几段python代码_如何用python跑一段鸿蒙最简单代码?
  2. sql 只取一条记录_后端程序员必备:书写高质量SQL的30条建议
  3. cin输入问题的处理:cin.clear() 、cin.sync() 、cin.ignore()
  4. 1、计算机图形学——2D变换与齐次坐标
  5. vs界面竖线光标变成灰色方块,输入时替代已有字符
  6. hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
  7. 010-你觉得单元测试可行吗
  8. 30个极大提高开发效率的Visual Studio Code插件
  9. EasyBridge:一种简单的js-bridge设计方案
  10. 快速启动神器 Wox