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

news/2024/7/24 12:58:08 标签: Struts1

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

前言

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.niftyadmin.cn/n/5276485.html

相关文章

Web请求与响应

目录 Postman Postman简介 Postman的使用 请求 简单参数 实体参数 数组参数 集合参数 日期参数 Json参数 路径参数 响应 ResponseBody 统一响应结果 Postman Postman简介 postman是一款功能强大的网页调试与发送网页http请求的Chrome插件&#xff0c;常用于进行…

5G+云渲染技术:将如何快速推进XR和元宇宙?

XR&#xff08;扩展现实&#xff09;领域正在以惊人的速度增长。目前&#xff0c;到 2024 年&#xff0c;一些专家表示这个行业的价值将达到 3000 亿美元。 这个行业发展如此迅速的部分原因是 XR 将在商业环境中的带来巨大利益。近年来&#xff0c;很多企业遇到了将增强现实和…

机器学习之逻辑回归,一文掌握逻辑回归算法知识文集

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Jenkins 执行远程脚本的插件—SSH2 Easy

SSH2 Easy 是什么&#xff1f; SSH2 Easy 是一个 Jenkins 插件&#xff0c;它用于在 Jenkins 构建过程中通过 SSH2 协议与远程服务器进行交互。通过该插件&#xff0c;用户可以在 Jenkins 的构建过程中执行远程命令、上传或下载文件、管理远程服务器等操作。 以下是 SSH2 Eas…

解决MyBatis-Plus 更新字段为null 不生效

1.异常说明&#xff1a; mapper.updateById()时&#xff0c; set为null 未生效&#xff0c;其他字段更新 periodRecordOriginal.setSettleTime(null);periodRecordOriginal.setActualSettleTime(null);periodRecordOriginal.setSettleStatus(0);int i periodRecordMapper.upd…

《每天一分钟学习C语言·三》

1、 scanf的返回值由后面的参数决定scanf(“%d%d”,& a, &b); 如果a和b都被成功读入&#xff0c;那么scanf的返回值就是2如果只有a被成功读入&#xff0c;返回值为1如果a和b都未被成功读入&#xff0c;返回值为0 如果遇到错误或遇到end of file&#xff0c;返回值为EOF…

智能优化算法应用:基于堆优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于堆优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于堆优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.堆优化算法4.实验参数设定5.算法结果6.参考文…

听力句子100

[ 30 ] Now, you are going to be working on / writing a series of music lessons / for very young children. 现在&#xff0c;你将为年幼的孩子们编写一系列音乐课程 As before, youll be basing / the degin of your lessons / on the existing research / into how c…