重温经典struts1之自定义类型转换器及注册的两种方式(Servlet,PlugIn)

news2025/3/6 11:57:40

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量,赋值的过程是struts提供的基本数据(int,double,boolean,string,java.sql.Date等)类型转换器完成的,有些数据的类型转换,例如画面上输入的日期格式的字符串,赋值给java.util.Date类型的变量,这种情况,struts就没有给我们提供转换器,这就需要我们自定义转换器,来处理,下面我们就一起学习,怎样编写自定义转换器,以及将自定义转换器注册到struts的两种方式。


自定义转换器

首先我们自定义一个转换器
方法:实现org.apache.commons.beanutils.Converter接口
重写convert方法,来完成日期格式的字符串,转换成java.util.Date类型。

自定义转换器java代码如下:

package xxx.xxx.converter;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class UtilDateConverter implements Converter {

	@Override
	public Object convert(Class type, Object value) {
		if (value instanceof Date) {
			return value;
		}

		Date date = null;
		if (value instanceof String) {
			try {
				date = new SimpleDateFormat("yyyy-MM-dd").parse((String) value);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return date;
	}

}

注册到struts中

将自定义转换器注册到struts中,有两种方法

  1. 通过Servlet注册
    自定义Servlet类
    方法:继承javax.servlet.http.HttpServlet类,重写init方法,通过ConvertUtils.register方法将我们自定义转换器注册到ConvertUtils类。
    struts为我们提供的所有数据类型转换器都注册在ConvertUtils类里

自定义Servlet代码如下(示例):

import java.util.Date;

import javax.servlet.http.HttpServlet;

import org.apache.commons.beanutils.ConvertUtils;

import xxx.xxx.converter.UtilDateConverter;

public class UtilDateConverterServlet extends HttpServlet {

	@Override
	public void init() {
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}

}

再将自定义的Sevlet类,通过web.xml,交给struts管理
web.xml文件代码如下:

  <servlet>
  	<servlet-name>UtilDateConverterServlet</servlet-name>
  	<servlet-class>xxx.xxx.servlet.UtilDateConverterServlet</servlet-class>
  	<load-on-startup>10</load-on-startup>
  </servlet>
  1. 通过PlugIn注册
    自定义PlugIn 类
    方法:实现org.apache.struts.action.PlugIn接口,重写init方法,同样通过ConvertUtils.register方法将我们自定义转换器注册到ConvertUtils类

自定义PlugIn代码如下(示例):

package xxx.xxx.plugin;

import java.util.Date;

import javax.servlet.ServletException;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

import xxx.xxx.converter.UtilDateConverter;

public class UtilDateConverterPlugIn implements PlugIn {

	@Override
	public void destroy() {
	}

	public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}
}

再将自定义的PlugIn类,通过struts-config.xml的plug-in标签,交给struts管理
struts-config.xml文件代码如下:

</struts-config>
    中间略
    <plug-in className="xxx.xxx.plugin.UtilDateConverterPlugIn"/>
    中间略
</struts-config>

到这里,我们就完成了,日期格式的字符串类型,转换成java.util.Date类型的示例
我们启动tomcat,运行一下,看看效果
java.util.Date的输入及显示,就是我们自定义转换器来完成的

运行效果
在这里插入图片描述

在这里插入图片描述

总结

struts1的自定义转换器讲解到这里,欢迎留言交流,下篇见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多任务数据采集

进程&#xff1a;操作系统中资源分配的基本单位 线程&#xff1a;使用进程资源处理具体任务 一个进程中可以有多个线程&#xff1a;进程相当于一个公司&#xff0c;线程是公司里面的员工。 一 多线程 多线程都是关于功能的并发执行。而异步编程是关于函数之间的非阻塞执行&…

python中整数和浮点数的运算

任意两个数相除时&#xff0c;结果总是浮点数&#xff0c;即便这两个数能够整除。例如&#xff1a; 在任何运算中&#xff0c;只要有操作数是浮点数&#xff0c;结果总是浮点数。例如&#xff1a;

【计算机系统结构实验】实验3 Cache性能分析

3.1 实验目的 加深对Cache的基本概念及其工作原理的理解&#xff1b; 掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处&#xff1b; 理解常见替换算法&#xff08;LRU与随机法&#xff09;的基本思想以及它们对Cache性能的影响。 3.2 实验平台 实验平台…

论文解读:Informer-AAAI2021年最佳论文

论文背景 应用背景 训练的是历史数据&#xff0c;但预测的是未来的数据&#xff0c;但是历史数据和未来数据的分布不一定是一样的&#xff0c;所以时间序列应用于股票预测往往不太稳定 动作预测&#xff1a; 基于之前的视频中每一帧动作&#xff0c;预测下一帧这个人要做什么…

Yolov5水果分类识别+pyqt交互式界面

Yolov5 Fruits Detector Yolov5 是一种先进的目标检测算法&#xff0c;可以应用于水果分类识别任务。结合 PyQT 框架&#xff0c;可以创建一个交互式界面&#xff0c;使用户能够方便地上传图片并获取水果分类结果。以下将详细阐述 Yolov5 水果分类识别和 PyQT 交互式界面的实现…

PHP数组定义和输出

数组就是一组数据的集合&#xff0c;把一系列数据组织起来&#xff0c;形成一个可操作的整体。 PHP中的数组与Java的数组不一样&#xff0c;需要有key&#xff08;键&#xff09;和value&#xff08;值&#xff09;&#xff0c;相当于Java中数组和键值对的结合。 数组的定义 …

12.21_黑马数据结构与算法笔记Java

//最近在复习&#xff0c;&#xff0c;java的进度会比较慢一些 目录 219 排序算法 基数排序2 220 排序算法 java排序 221 排序 e01 根据另一个数组次序排序 222 排序 e02 根据出现频率排序 thinking&#xff1a;关于比较器 223 排序 e03 最大间距 解法1&#xff08;超出内…

千帆 AppBuilder 初体验,不仅解决解决了我筛选简历的痛苦,更是让提效10倍!

文章目录 &#x1f31f; 前言&#x1f31f; 什么是百度智能云千帆 AppBuilder&#x1f31f; 百度智能云千帆 AppBuilder 初体验&#x1f31f; 利用千帆AppBuilder搭建简历小助手&#x1f31f; 让人眼前一亮的神兵利器 - 超级助理 &#x1f31f; 前言 前两天朋友 三掌柜 去北京…

【Linux进阶之路】线程

文章目录 一、初始线程1.概念2.执行3.调度4.切换 二、线程控制1.创建2.等待3.分离4.退出5.取消 三、线程安全1.互斥1.1初始1.2理解1.3锁1.3.1概念1.3.2原理1.3.4死锁 2.同步2.1概念2.2原理 3.生产消费者模型 总结尾序 一、初始线程 1.概念 简单的概念&#xff1a; 线程就是一…

NPOI 导出Excel提示内容有问题的解决方法

NPOI导出Excel 使用Microsoft Excel 打开提示内容有问题&#xff0c;如下&#xff1a; 原因是&#xff1a;在使用NPOI导出excel时&#xff0c;获得 workbook.Write(ms)生成的 MemoryStream后&#xff0c;使用了 ms.GetBuffer()返回文件内容&#xff0c;导致生成的 Excel文件结尾…

关于频谱仪是如何来实现辐射功率测量

1.1 内部基本原理框架 首先是接收到外部信号输入&#xff0c;然后经过可变衰减器衰减&#xff0c;接着进行变频&#xff0c;接着经过带宽带通滤波器进行滤波&#xff0c;滤波后的信号送入检波器进行信号检测&#xff0c;再经对数放大器放大后&#xff0c;送入低通滤波器进行视频…

【网络技术】BGP 基础与概述

该笔记主要作用与 BGP 路由协议的基础和概述讲解&#xff0c;其萌芽作用 参考视频&#xff1a;红茶三杯 关键词阐述&#xff1a;AS 独立自治网络系统机构 前置知识 在我们学习 BGP 路由之前所学习的所有动态路由策略&#xff0c;都同属一个路由类中&#xff1a;IGP BGP 路由协…

位运算:Leetcode137.只出现一次的数字(2)

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&#xff1a;3示例 2&#xff1a; 输入&…

【网络安全】学习Web安全必须知道的一本书

【文末送书】今天推荐一本网络安全领域优质书籍。 目录 正文实战案例1&#xff1a;使用Docker搭建LAMP环境实战案例2&#xff1a;使用Docker搭建LAMP环境文末送书 正文 学习Web安全离不开Web&#xff0c;那么&#xff0c;需要先来学习网站的搭建。搭建网站是每一个Web安全学习…

数据结构---算法的空间复杂度

文章目录 空间复杂度概念实例 空间复杂度 概念 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。…

超级逼真人脸生成,Stable Diffusion的3个关键技巧

大家好&#xff0c;你是否曾想过&#xff0c;为什么别人可以使用AI图像生成技术生成如此逼真的人脸&#xff0c;而自己的尝试却充满了错误和瑕疵&#xff0c;让人一眼看出是假的。尝试过调整提示和设置&#xff0c;但似乎仍无法与他人的质量相匹配。 本文将带大家了解使用Stab…

提示“由于找不到mfc140u.dll,无法继续执行代码”如何解决?

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到某个动态链接库文件&#xff0c;比如mfc140u.dll。这个问题可能会导致某些应用程序无法正常运行或打开。 一、关于找不到mfc140u.dll文件造成会的问题 mfc140u.dll是Visual C中的一个…

【华为鸿蒙系统学习】- HarmonyOS4.0之App项目开发|自学篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工…

吴恩达RLHF课程笔记

1.创建偏好数据集 一个prompt输入到LLM后可以有多个回答&#xff0c;对每个回答选择偏好 比如{prompt,answer1,answer2,prefer1} 2.根据这个数据集&#xff08;偏好数据集&#xff09;&#xff0c;创建reward model&#xff0c;这个model也是一个LLM,并且它是回归模型&#…

ASP.Net实现姓名添加查询(三层架构)

目录 演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 点击Button添加姓名 步骤&#xff1a; 1、建文件 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作&#xff09;…