struts异常相关知识
-
Struts 2基础Struts 2框架以配置文件的方式来管理核心组件,从而允许开发者方便地扩展框架的核心组件在struts.xml文件中通过配置常量来指定Struts 2的属性值,可以改变框架的默认行为Struts 2使用包来管理Action和拦截器等组件,每个包就是若干个Action、拦截器、拦截器引用组成的集合通过命名空间的配置,可以在Struts 2配置Action的过程中避免重名的问题,类似于Java语言中的“包”机制“包含配置体现的是软件工程中”分而治之“的原则,通过《include》元素在struts .xml文件中包含其他配置文件Struts 2中的Action是一个普通的Java类,该类通常包含一个execute()方法,该方法没有任何参数,只返回一个字符串类型值Struts 2中的Action可以通过ActionContext类访问Servlet API配置Action就是让Struts 2容器知道该Action的存在,并且能够调用该Action来处理用户请求dispatcher、redirect和redi
-
struts运行流程 客户端浏览器通过HTTP请求,访问控制器,然后控制器读取配置文件,然后执行服务器端跳转,执行相应的业务逻辑,然后,在调用模型层,取得的结果展示给jsp页面,最后返回给客户端浏览器 组成部分 struts 视图 标签库 控制器 action 模型层 ActionFrom JavaBean struts maven 安装 官网 : https://struts.apache.org/ idea新建web项目 接着如下依赖 网址 https://search.maven.org/artifact/struts/struts/1.2.9/jar <dependencies> <dependency> <groupId>org.apache.str
-
九:Struts 2配置详解Struts 2配置详解 一:Struts 2执行过程的解析 分析登录程序: (1.)获取Struts 2资源。 (2.)在应用程序中导入Struts 2的类库。 (3.)在web.xml文件配置StrutsPrepareAndExecuteFilter。 (4.)编写Action类进行配置 (5.)配置返回结果与物理视图资源的关系。 (6.)编写结果视图 2.配置资源: (1.)web.xml:任何一个web应用程序都是基于请求/响应模式进行构建的,无论采用哪种MVC框架都不离开web.xml文件配置。 (2.)Struts 2默认加载顺序:struts-default,struts-plu
-
异常、异常处理和统一异常处理异常、异常处理和统一异常处理 日常求赞,感谢老板。 废话不多说,先来几个基础垫吧垫吧。 一、异常 顾名思义,异常就是不正常呗,这是一种现象,也是Java为我们提供的程序安全退出的通道。一旦出现异常,异常处理机制会将代码执行交给异常处理器,而不再执行原有方法。 为了描述不同的这种不正常现象,我们定义了各种各样的异常类型。 首先来张图: 1)Throwable 没错它属所有异常和错误的“祖宗”,下面介绍几个常用的方法: getMessage():获取detail message即相关的错误描述信息
struts异常相关课程
struts异常相关教程
- 6. Spring MVC 与 Struts MVC WEB MVC 框架领域中有一款叫做 Struts MVC 的前辈,曾经也风光无限。当然,现在还是有很多企业在使用。Struts MVC 和 Spring MVC 是功能类型相同的框架,本体功能是一样的。Struts MVC 相比较 Spring MVC, 没有自己的生态圈。MVC 框架与其它框架有一个显著的不同点,MVC 是一个项目级别的架构思想,MVC 框架用于程序的整体架构设计,Struts MVC 很多功能需要借助于 Spring 实现,很显然没 Spring MVC 与 Spring 的吻合度好。Spring MVC 后面是 Spring 这个靠山。爱屋及乌、就近原则会让开发者更趋向于选择 Spring MVC。
- 7. 异常链 异常链是以一个异常对象为参数构造新的异常对象,新的异常对象将包含先前异常的信息。简单来说,就是将异常信息从底层传递给上层,逐层抛出,我们来看一个实例:public class ExceptionDemo5 { /** * 第一个自定义的静态内部异常类 */ static class FirstCustomException extends Exception { // 无参构造方法 public FirstCustomException() { super("第一个异常"); } } /** * 第二个自定义的静态内部异常类 */ static class SecondCustomException extends Exception { public SecondCustomException() { super("第二个异常"); } } /** * 第三个自定义的静态内部异常类 */ static class ThirdCustomException extends Exception { public ThirdCustomException() { super("第三个异常"); } } /** * 测试异常链静态方法1,直接抛出第一个自定义的静态内部异常类 * @throws FirstCustomException */ public static void f1() throws FirstCustomException { throw new FirstCustomException(); } /** * 测试异常链静态方法2,调用f1()方法,并抛出第二个自定义的静态内部异常类 * @throws SecondCustomException */ public static void f2() throws SecondCustomException { try { f1(); } catch (FirstCustomException e) { throw new SecondCustomException(); } } /** * 测试异常链静态方法3,调用f2()方法, 并抛出第三个自定义的静态内部异常类 * @throws ThirdCustomException */ public static void f3() throws ThirdCustomException { try { f2(); } catch (SecondCustomException e) { throw new ThirdCustomException(); } } public static void main(String[] args) throws ThirdCustomException { // 调用静态方法f3() f3(); }}运行结果:Exception in thread "main" ExceptionDemo5$ThirdCustomException: 第三个异常 at ExceptionDemo5.f3(ExceptionDemo5.java:46) at ExceptionDemo5.main(ExceptionDemo5.java:51)运行过程:通过运行结果,我们只获取到了静态方法 f3() 所抛出的异常堆栈信息,前面代码所抛出的异常并没有被显示。我们改写上面的代码,让异常信息以链条的方式 “连接” 起来。可以通过改写自定义异常的构造方法,来获取到之前异常的信息。实例如下:/** * @author colorful@TaleLin */public class ExceptionDemo6 { /** * 第一个自定义的静态内部异常类 */ static class FirstCustomException extends Exception { // 无参构造方法 public FirstCustomException() { super("第一个异常"); } } /** * 第二个自定义的静态内部异常类 */ static class SecondCustomException extends Exception { /** * 通过构造方法获取之前异常的信息 * @param cause 捕获到的异常对象 */ public SecondCustomException(Throwable cause) { super("第二个异常", cause); } } /** * 第三个自定义的静态内部异常类 */ static class ThirdCustomException extends Exception { /** * 通过构造方法获取之前异常的信息 * @param cause 捕获到的异常对象 */ public ThirdCustomException(Throwable cause) { super("第三个异常", cause); } } /** * 测试异常链静态方法1,直接抛出第一个自定义的静态内部异常类 * @throws FirstCustomException */ public static void f1() throws FirstCustomException { throw new FirstCustomException(); } /** * 测试异常链静态方法2,调用f1()方法,并抛出第二个自定义的静态内部异常类 * @throws SecondCustomException */ public static void f2() throws SecondCustomException { try { f1(); } catch (FirstCustomException e) { throw new SecondCustomException(e); } } /** * 测试异常链静态方法3,调用f2()方法, 并抛出第三个自定义的静态内部异常类 * @throws ThirdCustomException */ public static void f3() throws ThirdCustomException { try { f2(); } catch (SecondCustomException e) { throw new ThirdCustomException(e); } } public static void main(String[] args) throws ThirdCustomException { // 调用静态方法f3() f3(); }}运行结果:Exception in thread "main" ExceptionDemo6$ThirdCustomException: 第三个异常 at ExceptionDemo6.f3(ExceptionDemo6.java:74) at ExceptionDemo6.main(ExceptionDemo6.java:80)Caused by: ExceptionDemo6$SecondCustomException: 第二个异常 at ExceptionDemo6.f2(ExceptionDemo6.java:62) at ExceptionDemo6.f3(ExceptionDemo6.java:72) ... 1 moreCaused by: ExceptionDemo6$FirstCustomException: 第一个异常 at ExceptionDemo6.f1(ExceptionDemo6.java:51) at ExceptionDemo6.f2(ExceptionDemo6.java:60) ... 2 more运行过程:通过运行结果,我们看到,异常发生的整个过程都打印到了屏幕上,这就是一个异常链。
- 1.异常处理 当遇到异常时,Django Rest framework 会自动捕获,并按默认逻辑处理。我们也可以通过自定义异常处理函数来实现对异常的处理。from rest_framework.views import exception_handlerdef custom_exception_handler(exc, context): # 先调用REST framework默认的异常处理方法获得标准错误响应对象 response = exception_handler(exc, context) # 在此处补充自定义的异常处理 if response is not None: response.data['status_code'] = response.status_code return response在配置文件中声明自定义的异常处理REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'}如果未声明,会采用默认的方式,如下REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'}例如:补充上处理关于数据库的异常from rest_framework.views import exception_handler as drf_exception_handlerfrom rest_framework import statusfrom django.db import DatabaseErrordef exception_handler(exc, context): response = drf_exception_handler(exc, context) if response is None: view = context['view'] if isinstance(exc, DatabaseError): print('[%s]: %s' % (view, exc)) response = Response({'detail': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) return response
- Java 异常处理 Java 的异常处理是 Java 语言的一大重要特性,也是提高代码健壮性的最强大方法之一。当我们编写了错误的代码时,编译器在编译期间可能会抛出异常,有时候即使编译正常,在运行代码的时候也可能会抛出异常。本小节我们将介绍什么是异常、Java 中异常类的架构、如何进行异常处理、如何自定义异常、什么是异常链、如何使用异常链等内容。
- 5. 捕获异常 使用 try 和 catch 关键字可以捕获异常。try catch 代码块放在异常可能发生的地方。它的语法如下:try { // 可能会发生异常的代码块} catch (Exception e1) { // 捕获并处理try抛出的异常类型Exception} catch (Exception2 e2) { // 捕获并处理try抛出的异常类型Exception2} finally { // 无论是否发生异常,都将执行的代码块}我们来看一下上面语法中的 3 种语句块:try 语句块:用于监听异常,当发生异常时,异常就会被抛出;catch 语句块:catch 语句包含要捕获的异常类型的声明,当 try 语句块发生异常时,catch 语句块就会被检查。当 catch 块尝试捕获异常时,是按照 catch 块的声明顺序从上往下寻找的,一旦匹配,就不会再向下执行。因此,如果同一个 try 块下的多个 catch 异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面;finally 语句块:无论是否发生异常,都会执行 finally 语句块。finally 常用于这样的场景:由于 finally 语句块总是会被执行,所以那些在 try 代码块中打开的,并且必须回收的物理资源(如数据库连接、网络连接和文件),一般会放在 finally 语句块中释放资源。try 语句块后可以接零个或多个 catch 语句块,如果没有 catch 块,则必须跟一个 finally 语句块。简单来说,try 不允许单独使用,必须和 catch 或 finally 组合使用,catch 和 finally 也不能单独使用。实例如下:public class ExceptionDemo3 { // 打印 a / b 的结果 public static void divide(int a, int b) { System.out.println(a / b); } public static void main(String[] args) { try { // try 语句块 // 调用 divide() 方法 divide(2, 0); } catch (ArithmeticException e) { // catch 语句块 System.out.println("catch: 发生了算数异常:" + e); } finally { // finally 语句块 System.out.println("finally: 无论是否发生异常,都会执行"); } }}运行结果:catch: 发生了算数异常:java.lang.ArithmeticException: / by zerofinally: 无论是否发生异常,都会执行运行过程:divide() 方法中除数 b 为 0,会发生除零异常,我们在方法调用处使用了 try 语句块对异常进行捕获;如果捕获到了异常, catch 语句块会对 ArithmeticException 类型的异常进行处理,此处打印了一行自定义的提示语句;最后的 finally 语句块,无论发生异常与否,总会执行。Java 7 以后,catch 多种异常时,也可以像下面这样简化代码:try { // 可能会发生异常的代码块} catch (Exception | Exception2 e) { // 捕获并处理try抛出的异常类型} finally { // 无论是否发生异常,都将执行的代码块}
- Ruby异常捕获 当Ruby的代码运行异常时,会抛出异常,我们在开发时随时可能会发生异常,本章节中让我们来了解Ruby中的异常。
struts异常相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议