Struts2学习之路(5)请求参数封装

本文详细介绍了Struts2框架中的请求参数封装方法,包括属性驱动(无实体类和有实体类)及模型驱动三种方式。同时讲解了如何封装List集合等复杂类型。

**

请求参数封装

第一种方式:

index.jsp
这里写图片描述

Action

/*
 * 请求参数封装
 * 第一种方法:
 *  属性驱动:没有实体类
 *  表单的数据都定义在动作类中
 * 要封装成功需要按照要求:
 *  表单元素的name属性取值,必须和动作类中get/set方法后面部分保持一致
 *      如:表单元素name属性:name
 *        则动作类中必须有setName getName
 *  
 * 细节:
 *  struts2框架会为我们解决post请求的中文乱码问题,但是get请求不解决
 *  struts2会为我们自动转换数据类型:
 *        基本类型自动转换 
 *            同一个name的字符串会以逗号加空格的方式拼接起来
 *          例如多选框提交的多个value会拼接起来
 *        日期类型会按照本地格式转成日期对象
 *          本地格式:yyyy-MM-dd
 * 
 * 执行参数封装,是一个名称为params的拦截器实现的。
 * 
 * 
 */

public class DemoAction {
    String name;
    String sex;

    public String demo1(){

    System.out.println(name+"     "+sex);
    return "success";
    }


    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }    
}

第二种方式:

index.jsp
这里写图片描述

Action

/*
* 第二种方式:
 *  属性驱动:有实体类
 *  表单的数据都定义在实体类中,实体类定义在动作类中
 *   要封装成功需要按照要求:
 *  此时需要OGNL表达式来指定表单元素的name属性
 *   写法:
 *      user.name user.sex
 *  
 *  
 */

public class DemoAction {

    private User user;

    public String demo1(){

    System.out.println(user);
    return "success";
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }


}

User.java

public class User {
    String name;
    String sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
    return "User [name=" + name + ", sex=" + sex + "]";
    }        
}

第三种方式:

index.jsp

这里写图片描述

Action

/*
* 第三种方式:
 *  模型驱动:
 *  要封装成功需要按照要求:
 *     动作类必须实现ModelDriven接口
 *      动作类中需要定义模型,并且必须实例化出来
 *     提供接口抽象方法的实现,返回值为模型对象
 *  模型驱动的实现,除了params拦截器之外,还需要一个叫modelDriven的拦截器配合
 * 
 */

public class DemoAction implements ModelDriven<User> {

    private User user = new User();

    public String demo1(){

    System.out.println(user);
    return "success";
    }

    @Override
    public User getModel() {

    return user;
    }


}

复杂类型的封装:List集合封装

index.jsp
这里写图片描述

Action

/*
 * 复杂类型的封装:List集合封装
 * 复杂类型的封装都需要基于第二种情况实现
 * 
 *  
 */
public class DemoAction {

    private List<User> users;

    public String demo1(){

    System.out.println(users);
    return "success";
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }


}
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值