类型转换 | 学习笔记

简介: 快速学习类型转换,介绍了类型转化系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:类型转换】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7312


类型转换


简介:

在 servlet 中如果表单提交非字符串数据的时候,需要进行类型转换
在 struts2中,常见数据类型 struts2已经自动的进行了类型转换无需程序猿进行手动转换在某些情况下,有自定义的类型时struts2 不能完成类型转换,那么需要手动转换,如果该自定义类型使用的频率较高时,手动转换重复代码将会增多---使用struts2提供的类型转换器来进行类型转换

内容介绍:

一.UserServlet 代码

二.坐标点 (不进行类型转换方式)

三.使用类型转换

四.坐标点(使用类型转换方式)


一.UserServlet 代码

案例:提交 age)

package cn.sxt.servlet;import java.io.IOException;public class UserServlet extends HttpServlet@Overrideprotected void service (HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException String strAge = req.getParameter("age");int age=0;if(strAge!=null)age= Integer.parseInt(strAge);


二、坐标点(不进行类型转换的方式)

(1)struts 代码

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC//Apache Software Foundation//DTDStrutsConfiguration2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name= "default" namespace="/"extends="struts-default">

<action name= "point" class= "cn.sxt.action.PointAction"><result>/ index.jspk/result></action></package></struts>

2point 代码package cn.sxt.entity;public class Pointprivate int x;

Private  int y;public int getX() return x;public void setX(int x)

this.x =x;public int getY() return;public void setY(int y)

this.y =y;
(3)pointaction
import com.opensymphony.xwork2.Action;import cn.sxt.entity.Point;public class PointAction fprivate Point point;public String execute()System.out.println(point.getX()+"-----"+point.getY());

return Action.SUCCESS;public Point getPoint()return point;public void setPoint/Point point <package cn.sxt.actlon;public classPointAction

(4)pointer(页面)

<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %>@<%Stringpath = request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+reque%><!DOCTYPE HTML PUBLIC"-//W3C//DTDHTML4.01Transitional//EN">.<html><head><base href="<%=basePath%>"><title>My JSP'index.jsp'starting page</title><meta http-equiv="pragma "content= "no- cache"><meta htto-eauiv="cache-controL"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="G"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"><meta http-equiv="description"content="This is my page"><link rel="stylesheet"type="text/css"href="styles.css"></head><body>

<form action="point.action" method="vost">点:x:<s:property value="point.x"/>br>

y:<s:property value="point.y"/>br>

<input type= "submit" value="提交"/></body></html>

5index<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %>@<%Stringpath = request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+reque%>.">My JSP'index.jsp'</span></code><code><span class="lake-fontsize-1515">starting pagecontent= "no- cache">

点:

x:br>

y:br>


运行结果

image.png

注:这种方式不符合数学逻辑


三、使用类型转换

(1)步骤

编写类型转换器.继承 StnutsTypeConverter 类

编写 xwork-conversion.properties 的配置文件,放于 src 下;内容为要转换的类型=类型转换器
2案例(pointconverter 代码)
import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;public class PointConverter extends Struts TypeConverter*context ActionContext
*values 要进行类型转换的字符串数组
*toClass 被转换的类型
@Overridepublic object convertFromString(context,String[] values,ClasstoClass

String value=values[0];System.out.println(value);

Point point = new Point();String x = value.substring(1,value.indexOf(","));String y=value.substring(value.indexOf(",")+1,value.length()-1);System.out.println("x="+x);System.out.println("y="+y);point.setX(Integer.parseInt(x));point.setY(Integer.parseInt(y));return point;@Overridereturn null;@Overridepublic String convertToString(Map context,Object o) return null;

3)StrutsTypeConverter.
public abstract class StrutsTypeConverter extends DefaultTypeConverter fpublic object convertValue(Map context,object o,Class toClass) if (toClass equals(String.class)) return convertToString( context,else if (o instanceof String[]) return convertF romString(context,(String[])o,toClass);else if (o instanceof String) return convertF romString(context, new String[lf(String)o],toClasreturn performFalbackConversion(context,o,toClass);Converts one or more String values to the specified class.@param context the action context@param valuestheString values to be converted,such as those submitt

@param toClass theclass toconvert to@return the converted objectpublic abstract Object convertF romString(Map context, String[]values, Class/***Converts the specified object to a String.*@param context the action context*@paramthe object to be converted@return the converted Stringpublic abstract String convertToString(Map context,object o);

4xwork- conversion properties 配置文件
cn.sxt.entity.Pointacn.sxt.converter.PointConverter

(5)运行结果

4,3

x:4

y:3

注:类型转换器起作用


四、坐标点(使用类型转换方式)

完整步骤

(1)类型转化器代码
public class PointConverter extendsStruts TypeConverter{/***将表单提交的字符串数据转换为指定自定义类型

*context是ActionContext*values要进行类型转换的字符串数组*toClass被转换的类型**/@Overridepublic Object convertFromString(Map context,String[] values,ClasstoClass) string value=values[e];Point point = new Point();String x=value.substring(1,value.indexOf(","));Stringy=value.substring(value.indexOf(",")+1,value.length()-1);System.out.println("x="+x);System.out.println("y="+y);point.setX(Integer.parseInt(x));point.setY(Integer.parseInt(y));return point;
* 将定义类型转换为字符串在前台页面显示--- -通过 ognl 表达式将会使用该方法进行转换* context---actionContext*要转换的对象@Overridepublic String convertToString(Map context,object o)

Point point = (Point)o;return"("+point.getX()+","+point.getY()+")";
2xwork- conversion properties 配置文件
cn.sxt.entity.Pointacn.sxt.converter.PointConverter
3Action 代码不変,struts.xml 配置不変
4jsp 页面

<form action= "point. action" method= "post"〉点:<input type="text" name= "point"/><br〉<input type= "submit" value="提交"/></form>

相关文章
|
机器学习/深度学习 算法 计算机视觉
使用sklearn进行特征选择
背景 一个典型的机器学习任务,是通过样本的特征来预测样本所对应的值。如果样本的特征少,我们会考虑增加特征。而现实中的情况往往是特征太多了,需要减少一些特征。
|
4天前
|
人工智能 边缘计算 算法
2025年12月数字人厂商综合实力榜单发布,揭示产业三大演进方向
2025年数字人产业告别野蛮生长,形成头部领跑、腰部深耕、创新突破的格局。权威榜单显示,技术、落地、商业与生态成核心竞争力,行业集中度提升,前十大厂商市占超65%。世优科技等凭借全栈自研与场景融合优势领先,政务、文旅、教育等垂直领域涌现特色厂商。技术迈向“形神兼备”,应用从示范走向刚需,生态标准化加速推进,数字人正深度融入千行百业,成为降本增效与价值共创的新引擎。
126 1
|
5天前
|
自然语言处理 运维 供应链
哪些Agent工具适合中小企业?从选型到落地,一篇吃透
中小企业数字化转型常陷“投入打水漂”困境:重金引进系统却因人才短缺、操作复杂沦为摆设。本文聚焦中小企业真实痛点,拆解Agent工具如何以低成本、易操作、高适配助力企业降本增效。从智能客服、财务自动化到生产管理,精选实用场景与落地策略,手把手教你选对“用得起、用得会、用得好”的AI工具,让技术真正赋能业务,实现“小投入,大回报”。
|
9月前
|
人工智能 自然语言处理 供应链
AI直播销售奇迹:00后DeepSeek的3.3亿真相探究
近日,“00后主播借DeepSeek技术直播卖出3.3亿”的新闻引发关注。此次成功不仅得益于主播个人魅力,更离不开“交个朋友”直播间团队对AI技术的深度融合。通过DeepSeek大模型,AI在内容生成、流程优化等方面大幅提升效率,实现了直播话术自动生成、多场景适配及全球化支持。团队还利用AI进行选品、合规审核和数据分析,优化直播策略。多位主播精细分工,结合强大的背景资源,确保高效带货。AI与真人主播互补,提升转化率。尽管存在版权、就业等争议,此次销售奇迹展示了AI技术商业化的潜力,并为行业提供了宝贵案例。
383 0
|
缓存 容器
Flutter实现仿微信群头像功能
Flutter实现仿微信群头像功能
269 0
|
存储 文件存储
DAS和NAS的性能对比?
【6月更文挑战第29天】DAS和NAS的性能对比?
470 4
|
机器学习/深度学习 传感器 算法
【机器学习】在聚类算法中,使用曼哈顿距离和使用欧式距离有什么区别?
【5月更文挑战第12天】【机器学习】在聚类算法中,使用曼哈顿距离和使用欧式距离有什么区别?
|
存储 算法 搜索推荐
矢量数据库基础:概念、原理与应用场景
【4月更文挑战第30天】矢量数据库,处理高维向量数据的工具,应用于GIS、推荐系统、图像搜索及语义搜索。核心原理是将原始数据嵌入到高维空间,通过索引算法优化搜索性能。现代深度学习模型如Word2Vec提升向量表示准确性,KD-Tree、LSH等算法加速相似性搜索。随着技术发展,矢量数据库在数据科学领域的重要性日益增强。
|
机器学习/深度学习 传感器
机器学习之理解Bias-Variance Tradeoff
这篇内容讨论了机器学习中的Bias-Variance Tradeoff概念。Bias代表模型预测期望值与真实值的差距,高Bias(欠拟合)可能源于模型过于简单。Variance则是模型预测在不同数据集上的变异性,高Variance(过拟合)可能因模型过于复杂,过度拟合噪声。理想的模型应在Bias和Variance之间找到平衡,以降低测试误差。文章通过多项式拟合正弦曲线的例子说明了如何在不同复杂度模型间进行权衡。
433 0