Struts2学习笔记之类型转换 一

本文介绍了一个使用Struts2框架实现类型转换的实际案例。详细展示了如何通过自定义转换器处理用户输入,并将其转换为相应的Java对象。同时,还介绍了项目配置及运行流程。

Struts2之类型转换一

类型转换让值的传递变的更加方便灵活,下面以一个学习的例子来说明

请求端jsp代码
user.jsp

<html>
<head>
<title>Insert title here</title>
</head>
<body>
    <form action="userAction">
        username: <input type="text" name="user"><br>
        <input type="submit" value="submit">
    </form>
</body>
</html>

注意:
1、当action的值没有带任何扩展名时,默认会加上.action作为扩展名,所以这里写成userAction.action也是可以的。
2、这里定义的name属性值一定要跟服务端的action里面的set方法保持关联,也就是说在action中必须有一个setUser的方法才能够正常取得到文本框中的内容(由底层反射实现所决定)。

响应jsp
output.jsp

<html>
<head>
<title>Insert title here</title>
</head>
<body>
    <%
        User user = (User) request.getAttribute("user");

        if (user != null) {
    %>
    username: <%=user.getUsername()%><br>
    password: <%=user.getPassword()%>
    <%
        } else {

            System.out.println(user);
        }
    %>
</body>
</html>

服务端action
UserAction .java

public class UserAction extends ActionSupport {

    private User user;
    private static final long serialVersionUID = 1L;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

注意:
定义私有属性的时候确保属性名与请求端的parameter名保持一致,这样自动生成的get、set方法在被struts利用反射解析的时候很容易就找到。

请求信息对应的bean
User.java

public class User {

    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

类型转换
UserConverter.java

public class UserConverter extends DefaultTypeConverter {

    @Override
    public Object convertValue(Map context, Object value, Class toType) {
        if (User.class == toType) {//从页面向后台对象转换

            String[] str = (String[]) value;
            String firstStr = str[0];
            StringTokenizer st = new StringTokenizer(firstStr, ";");//分割字符串
            String username = st.nextToken();//取得用户名
            String password = st.nextToken();//取得密码

            User user = new User();
            user.setUsername(username);
            user.setPassword(password);

            return user;
        }
        return null;
    }
}

注意:
自定义的类型转换类都要继承于DefaultTypeConverter 类,该类属于ognl.jar包,通过重写的形式来实现自定义的类型转换方法。

至此,服务端的控制层和模型层基本完成,但是,需要一个配置文件来连接action和converter,这个配置文件的编写有两种:
1、①配置文件名:UserAction-conversion.properties(定必须这么写);②配置文件路径:与UserAction.java同包。③配置文件内容:user=com.struts.converter.UserConverter
2、配置文件名:xwork-conversion.properties(固定必须这么写);②配置文件路径:即classpath同路径(src下面);③配置文件内容:com.struts.bean.User=com.struts.converter.UserConverter
它们的区别在于,如果时跟action同包,那么,每个action都必须有自己的-conversion.properites配置文件,而第二种情况下,则可以将所有的action配置在同一个配置文件中。

接下来是struts和webapp的配置
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app   
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"   
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="struts" extends="struts-default">
        <action name="userAction" class="com.xf.struts.UserAction">
            <result name="success">/output.jsp</result>
        </action>
    </package>
</struts>

注意:
1、package属性name可以自定义,只要有意义就行
2、action属性name与请求jsp中的action保持一致,class值对应的就是action的java类路径。
3、result属性name对应action中的excute方法返回的值,标签的内容则是要响应的jsp。

将项目部署到tomcat中进行测试。
页面中输入:
这里写图片描述

点击submit,显示下面的结果。
这里写图片描述

届时,一个简单的struts类型转换实例全部完成。下面来分析下项目运转起来的流程:
首先,启动服务器,在请求页面输入相关信息,点击提交按钮。接着,由web.xml接管请求,发现配置了相关的strtus-filter(过滤器),将请求转到struts.xml。在sturts中,请求被链接到了后台的action对象中进行处理,而与此同时,-conversion.properties配置文件获取到了消息,对传递到action中的user对象进行类型转换处理,处理完毕后返回object给action,action执行execute方法,将响应操作提交给struts,根据sturts.xml配置的响应页面进行跳转,得到最终的结果。

最后,以张龙老师的名言结尾: no reflection, no most frameworks.

当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高水平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值