struts1.1中的异常应用实践

深入理解Struts框架:mystruts实践与应用 本文还有配套的精品资源,点击获取 简介:Struts是Apache软件基金会的Jakarta项目下的一款开源框架,专注于构建基于Java的企业级Web应用程序。Struts 1.3.10是该框架的一个较旧版本,含有更新和安全修复。主要知识点包括MVC模式、ActionServlet、ActionForm、Action类、ActionMapping、Tiles扩展、Strut... 阅读详情

struts的异常处理机制带我们很大的方便。通过思考和自己作例子,觉得以下这种方式较为灵活:

    首先为你的应用程序定制一套异常类。例如,先定义一个基类(可以是虚类),注意,在此它扩展自RuntimeException,这是为了在struts的action中顺利捕获到。


public class BaseException extends RuntimeException {...}

下来你可以定义几个子类,例如:Dao异常,事务处理异常,service异常等。在spring中,包
org.springframework.dao下定义了一套Dao异常,值得大家学习一下。

接着,在struts-cofig.xml文件中定义全局异常如下,此处的key属性我已经不准备用了:
    <global-exceptions>
        <exception key="todo" type="org.chage.exception.BaseException"        handler="org.chage.exception.MyExceptionHandler" />
    </global-exceptions>

   
下面看一下我的处理异常的类:
   
package org.chage.exception;
import org.apache.struts.action.ExceptionHandler;
import ...  
public class MyExceptionHandler  extends ExceptionHandler {

 public ActionForward execute(
   Exception exception,
   ExceptionConfig config,
   ActionMapping mapping,
   ActionForm form,
   HttpServletRequest request,
   HttpServletResponse response)
  throws ServletException
 {      
    request.setAttribute("exception", exception);
    //返回原始请求的Forward,当然你也可以定义一个全局异常Forword,都转向它
    return mapping.getInputForward();
 }
}

  

在页面上(此页面我们设置为请求action,即发生异常的action的input属性),我们显示错误信息时可以使用struts标签如下,注意,这里显示的信息和资源属性文件无关,是你自己抛出的:

<logic:present name="exception">
   <bean:write name="exception" property="message"/>
</logic:present>

这样作的好处在哪里呢?我们来看一下,一般我们的思路是,发生了逻辑错误,比如说,用户名输重复,或者准备修改的数据已被他人删除等,我们要捕获它并显示给用户,第一感是在action中作的,例如:
try{
   //do something logic method...
}catch (XXXException e){
  ActionErrors errors= new ActionErrors();
  ActionError error=new ActionError("error.missing.username");
  errors.add("error.xxx",error);
  saveErrors(request,errors);
  return mapping.findForward("errorPage");
}

 
设计良好的action应该仅仅是web层的一个“路标指引器”,真正的逻辑方法是调用其他的业务bean来完成的,简单地说,通常认为action中的代码越少越好.如果采用了上面那种全局异常处理机制,action此时就可以不用管逻辑异常了,由业务bean负责抛出就可以了,大家就可以少写一些action中的try  catch 语块了,也可以绕开ActionError,思路上是不是更清晰?异常在真正发生的类中被抛出,然后向上传递,一直传到action中,struts负责捕获之,当然这里的异常你必须已经定义过了。

注:
1. 如果你不想写 MyExceptionHandler 类,当然struts-config.xml中的handler=属性也要去掉,还有一种办法可以显示错误信息在 jsp页上,先引用jstl标签库,然后如下:

<c:out value="${requestScope['org.apache.struts.action.EXCEPTION'].message}"/>


2.如果觉得错误信息交给程序员自由发挥不太好,或者想实现国际化,我的想法是这样的,可以另建一个国际资源文件专门放错误信息,规则如struts,使用spring的ApplicationContext类来装载,所有的serivce类通过这种办法传递错误码,即key,获得错误消息。此为后话。
Struts2框架中的JSON集成与应用实践 本文还有配套的精品资源,点击获取 简介:Struts2是一个用于构建企业级Java Web应用的框架,能够通过JSON插件高效地在服务器端和客户端之间交换数据。通过示例项目"Struts2Json example",展示了如何集成JSON插件到Struts2框架中,并通过配置和Action类的设计返回JSON格式的响应。文章详细说明了如何在Struts2配置文件中添加JSO... 阅读详情

相关推荐

Struts框架实战应用教程

本文还有配套的精品资源,点击获取 简介:Struts是一个开源框架,用于构建基于Java的企业级Web应用程序,并实现了MVC设计模式。本教程通过实例和详细解释,旨在指导学习者深入理解Struts框架的核心概念、配置、组件以及最佳实践,以便快速掌握Struts在Web应用开发中的应用。 1. Struts开源框架概述 1.1 Struts框架简介 St...

weixin_42524864的博客 816

Struts1框架九之声明式异常

这是关于Struts1框架的最后一篇笔记,在这里我们来讲讲Struts1异常的处理,而这里主要讲的就是国际化的异常处理机制。首先我们来看看配置文件里面关于异常信息的配置,这里其他的信息在前面关于struts1框架里面都有讲解,这里我们主要关注于 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC

qq_17165717的博客 439

Struts1与Hibernate项目实践:附带完整代码及解析

本文还有配套的精品资源,点击获取 简介:Struts1和Hibernate是Java Web开发中的关键框架,分别基于MVC设计模式和对象关系映射(ORM)。本压缩包提供了一个名为"User"的示例项目,包含源代码和详细说明,旨在帮助新手学习这两个框架的基本应用,特别是如何在企业级应用程序中整合它们以实现用户管理功能。本示例涵盖从请求处理到数据持久化的完整流程,包括Stru...

weixin_36122351的博客 1647

struts1 声明式异常

  所谓struts声明式异常,就是自己不try catch了,交给struts框架去处理。   步骤:   1.定义一个自己的异常,比如AppException,让它继承RunTimeException,并实现父类的所有构造方法。 比如: package com.germmyedu.util; public class AppException extends Runtim...

germmy-神一样的开发 172

让struts支持jdk1.8的spring包

struts项目在jdk1.8环境下报错,提示升级到jdk1.5以上,最后修改了spring这个jar包才解决这个问题。

struts1.2.9 jar包

struts1.2.9 jar包,是struts的基本包

Struts1.X异常处理

Struts1.X异常处理  --作者:马庆槐     摘要:本文描述了在在Struts 1.X异常处理框架和流程,以实际项目开发异常处理事例讲解在项目中如何在Dao层使用异常处理机制,并给出在每个阶段内容。1、概述在Struts 1.X中对异常的处理使用Except

叶落枫亭 1697

MuJoCo与Isaac Sim的无缝对接:利用USD导出功能实现强化学习场景的跨平台迁移

本文详细介绍了如何通过USD导出功能实现MuJoCo与Isaac Sim的无缝对接,助力强化学习场景的跨平台迁移。文章解析了USD格式的核心优势,包括分层合成、物理属性继承和时间轴动画,并提供了从MJCF到USD的完整转换流程及在Isaac Sim中的高级应用技巧,帮助开发者高效迁移和优化强化学习环境。

weixin_29073241的博客 517

struts1.3-自定义exception

1 自定义异常类 SystemException.java public class SystemException extends RuntimeException{  //自定义key  private String key;  //自定义参数  private Object[] values;  //实现父类的构造方法  public SystemException() {   super(...

ywj_316的博客 186

2026年9月20日 2026年CSP-S初赛真题整理

这是本次考试最难的部分,涉及Gray Code(格雷码)+ 状态压缩 + 数学推导难点解决方案关键代码问题转化将得分差转化为m−2xim - 2x[i]m−2xi高效枚举Gray Code相邻状态O(1)转移奇偶判断利用奇偶性统一条件。

weixin_51184047的博客 631

struts2.1.6 异常处理

现在不知道什么原因,就是很喜欢使用annotation。 在升级到struts2.1.6 变化不少。 使用了convention plugin代替codebind plugin 但是异常处理还是没有xml那么强大。。 在使用annotation的时候,在xml中配置的全局异常又无法使用。 很是郁闷的情况。...

学得越多,忘得越多;忘得越多,知道的越少 138

uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载页;uniapp 在外部打开APP(schemes)

A将某商品分享给B,B点击后判断是否安装APP,若安装直接打开,没有安装则跳转下载页;

@微你 5682

struts1,2异常处理

<br /> struts2异常处理:   <br /> Struts2提供了很多拦截器,这里也提供了异常处理的拦截器,已经在struts-default.xml中配置好了,我们只需要声明式应用即可,Action方法抛出的异常能够被自动捕获然后经过映射指向一个预定义好的Result。<br /><interceptors> <interceptor name=”exception” class="com.opensymphony.xwork.interceptor.ExceptionMappingInt

haoren_e的专栏 3182

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

vue3,elementPlus,el-table,typescript,表格组件,Table表格,表格拖动排序,表格拖曳排序,鼠标拖拽表格进行排序功能,elementplus表格如何实现拖动每行进行排序操作,表格拖动改变顺序,鼠标拖曳,表格内的数据项拖拽排序,vue3如何实现element-Plus表格组件进行表格内的数据项拖拽排序,列表拖拽排序效果,实现table动态拖拽,鼠标拖着排序,vue3 element Plus 表格拖曳拖动拖拽 排序,el-table拖拽排序实现,表格内容拖拽重新排序,树形表

✅ 精选推荐文章 1万+

在struts应用中处理异常的各种方式

STRUTS为我们提供了两种错误机制,我们把一致的,可以认为的处理叫做他错误,如用户密码错误。位置的系统产生的错误叫他异常。对于用户错误处理struts框架提供了两个类来处理它,一个是actionerror(用来包装错误信息)另一个是actionerrors(用来存放actionerror),1、创建异常类(1)扩展moduleexception类;(2)创建自定义的异常类体系2、由JAVAWEB

Arqui Standard 1625

LiveBOS UploadFile.do 任意文件上传漏洞复现(XVE-2023-21708)

LiveBOS UploadFile.do 接口存在任意文件上传漏洞,未经身份验证的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 2426

struts1的异常处理:(整理)

struts1的异常处理

hakunamatata2008的专栏 4277

【知识分享】IBIS 建模指南 04

文章详细阐述了将缓冲器数据转换为IBIS模型格式的核心步骤与规范要求。主要内容包括:1)IBIS文件三大结构(文件头信息、组件引脚映射、缓冲器行为描述)及其关键词定义;2)四种关键I-V表(上下拉、电源/地钳位)的数据处理规则,强调需避免重复计算效应;3)切换特性描述方法,指出V-T波形表优于Ramp数据的三大优势;4)差分缓冲器通过[DiffPin]关键词实现建模的特殊流程。文中特别强调数据外推校验、参考电压基准转换、工艺角数据排序等易错环节的处理技巧,为创建符合IBIS 4.0规范的精确模型提供指导。

一只豌豆象的博客 2054

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

struts中的异常应用实践

struts的异常处理机制带我们很大的方便。通过思考和自己作例子,觉得以下这种方式较为灵活:     首先为你的应用程序定制一套异常类。例如,先定义一个基类(可以是虚类),注意,在此它扩展自RuntimeException,这是为了在struts的action中顺利捕获到。 public class BaseException extends RuntimeException {.

luosijin123的专栏 695

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Struts1 异常处理

异常处理 当Java虚拟机在执行应用程序的某个方法时遇到了非正常现象,jvm就会生成一个异常对象,把它抛给客户,以便向客户通报程序在运行中除了问题。客户可以是上层调用的方法或者终端用户。 Struts框架处理异常的机制建立在java处理异常的基础上。 1。java异常   1)java异常       java异常是在java程序运行时遇到的非正常情况而创建的对象,它封装了异常信息。

xiaozhuzhu87916的专栏 619

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

struts2中的异常映射处理机制

struts2中的全局异常映射和局部异常映射

VipMao的博客 2796

struts自定义异常

SSH项目中利用struts的ExceptionHandler处理异常2009-08-04 14:49一、概述       在Struts1.X的版本中加入了对异常的处理 Exception Handling,有了它就不需要我们用try/catch等捕获异常,一旦出现了我们已经定义的异常那么就会转到相应得页面,并且携带定制的信息。Struts框架提供了默认的异常

liumuqi110的专栏 975

Struts2 异常处理机制

原创 Struts2 异常处理机制 ...

weixin_44137282的博客 1867

struts1.2 全局异常

对于一个action若发生异常则先查找本身action是否有相应异常的配置,若无则查找全局异常配置,还没有则报错。异常处理一定会用到资源文件 局部配置如下 &lt;!--             key指定信息在资源文件中的键值             type指发生的异常类型。             bundle使用哪个资源文件,不配置则使用默认的资源文件         ...

shanshang的专栏 410
上一篇: 补充关于iBatis的缓存使用
下一篇: 避免过度设计
_chage
博客等级 码龄24年 2粉丝 51原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值