批量数据处理 | 学习笔记

简介: 快速学习批量数据处理,介绍了批量数据处理系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门批量数据处理】学习笔记,与课程紧密联系,让用户快速学习知识。

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


批量数据处理

 

内容介绍:

批量提交

一、 数组和集合的处理

二、 集合对象的处理

 

一、 数组和集合的处理

首先我们看一下代码,新建一个 Web Project,

名称为 struts2_branch

然后将常规的东西导过来,之后导入核心配置文件,将配置复制过来。接下来我们要加一个 struts。

假如现在要提交一个数据,在 jsp 里设个页面,比如我们提交多个爱好 hobbies

我们设置一个 form 表达,提交的是用户信息

<body>

<form action="add.action " method="post">

用户名:

<input type="text" name="name" /><br>

爱好:

<input type="cheskbox" name= "hobbies"value="football"/>足球

<inputtype="checkbox" name= "hobbies" value="basketball" />篮球

<input type="checkbox" name="hobbies" value="pingpang" />乒乓球

<input type= "cheskbox" name= "hobbies" value="yumaoqiu"

/>羽毛球<br>

<input type=submit”value=”提交”/>

</form>

之后创建 UserAction

Package cn.sxt.action;

Public class UserAction {

private String name;

private String[] hobbies;

public String execute(){

System.out.println(“name=”+name);

System.out.println(“hobbies=”+hobbies.length);

Return ”success”;

}

public String getName(){

return name;

}

public void setName(String name){

提交过来后,我们要配置 struts_xml

<struts>

<package name=”default”extends=”struts-default”namespace=”/”

<action name=”add” class=”cn.sxt.action.UserAction”>

<result>/incex.jsp</result>

</action>

</package>

</struts>

通过处理,我们可能会发现 struts2处理可能不是很完美,那就需要我们自己去处理

我们去访问一下,选择乒乓球和羽毛球选项,当出现 This is my page 时,说明数据过去了,hobbies=2会显现。

对于数组,我来给大家演示一下

Public class UserAction {

private String name;

private String[] hobbies;

public String execute(){

System.out.println(“name=”+name);

System.out.println(“hobbies=”);

for(int i=0;i<hobbies.length;i++){

system.out.print(hobbies[i]+“ ”)

return “success”;

}

public String getName(){

我们再去访问刚才的页面,勾选三个选项提交,我们可以看到

hobbies=football basketball pingpang

对于单个数据,我们可以直接提交,以数组的形式去显示它是可以的,假如在这个地方再提交一个数据,不再是爱好是喜欢游戏。

<body>

<form action="add.action " method="post">

用户名:

<input type="text" name="name" /><br>

爱好:

<input type="cheskbox" name= "hobbies"value="football"/>足球

<inputtype= checkbox" name= "hobbies" value="basketball" />篮球

<input type="checkbox" name="hobbies" value="pingpang" />乒乓球

<inputtype="cheskbox"name="hobbies" value="yumaoqiu"/>羽毛球<br>

喜欢游戏:

<input type="checkbox" name="games " value="Lol."

/>英雄联盟

<input type="cheskbox" name="games" value="dota" / >dota

<input type="checkbox" name= "games " value= "war3"

/>魔兽争霸

<input type="checkbox." name= "games " value="cs"

/>反恐精英<br>

<input type=submit”value=”

提交”/>

</form> 

我们可以用数组去处理,也可以用 struts-list 去处理

Public class UserAction {

private String name;

private String[] hobbies;

private List<String> games;

public String execute(){

System.out.println(“name=”+name);

System.out.println(“hobbies=”+hobbies.length);

}

System.out.println();

System.out.println(“games=”+games);

return ”success”;

}

我们去验证一下,最后得到数据 hobbies=pingpang yumaoqiu  games=[dota,cs]

说明对于单个或批量的数据处理,可以使用数组,也可以用 list 集合处理

Jsp 中代码

<form action="add.action " method="post">

用户名:<input type="text" name="name" /><br>

爱好:

<inputtype="cheskbox"name= "hobbies"value="football"/>足球

<inputtype="checkbox" name= "hobbies" value="basketball" />篮球

<input type="checkbox" name="hobbies" value="pingpang" />乒乓球

<inputtype="cheskbox"name="hobbies" value="yumaoqiu"/>羽毛球<br>

喜欢游戏:

<input type="checkbox" name="games " value="Lol."/>英雄联盟

<input type="cheskbox" name="games" value="dota" / >dota

<input type="checkbox" name= "games " value= "war3"/>魔兽争霸

<input type="checkbox." name= "games " value="cs"/>反恐精英<br>

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

</form>

Action 处理

public class UserAction {

private String name;

private String[ ] hobbies ;

private List<String> games;

public String execute(){

System.out. println( "name="+name);

System.out.print("hobbies=");

for(int i=o;i<hobbies.length ;i++){

System.out.print(hobbies[i]+”");

}

System.out-println( );

System. out- println( "games="+games);

return "success";

}

public String getName() {

return name;

}

publie void setName( String name) {

this.name = name;

}

public String[ ] getHobbies( ) {

return hobbies;

}

publie void setHobbies(String[ ] hobbies) {

this.hobbies = hobbies;

}

public List<String> getGames() {

return games;

}

public List<String> getGames()

return games;

}

public void setGames(List<String> games) {

this.games = games;

}

}

 

二、 集合对象的处理

有些时候,我们提交的可能是对象,那么提交对象怎么处理呢,假如我现在写一个user

Package cn.sxt.action;

public class User {

private String name;

private int age;

public String getName(){

return name;

}

public void setName(String name){

this.name=name;

}

public int getAge(){

return age;

} 

现在来看如何处理批量对象问题

/body>

<form action= "batch.action" method="post">

用户名:

<input type= "text" name=" " />

年龄:

<input type="age " name=" "><br>

用户名:

<input type= "text" name=" " />

年龄:

<input type= "age" name= ""><br>

用户名:

<input type= "text" name=" "/>

年龄:

<input type="age " name=" "><br>

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

</form>

</body>

然后写个 action,叫 BatchAction

Public class BatchAction {

private List<User> users;

public string execute(){

for(User u:users){

System.out. println(u);

}

return "success";

}

public List<User> getUsers( ) {

return users;

}

public void setUsers(List<User> users) {

this.users=users;

}

}

前面那个页面就需要更改

/body>

<form action= "batch.action" method="post">

用户名:

<input type= "text" name=" users.name" />

年龄:

<input type="age " name="users.age "><br>

用户名:

<input type= "text" name=" users.name " />

年龄:

<input type= "age" name= " users.age "><br>

用户名:

<input type= "text" name=" users.name "/>

年龄:

<input type="age " name=" users.age "><br>

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

</form>

</body>

验证一下,我们可以得到数据,数据给了 users,但是这不是我们想要的数据 

当 name=users 时

/body>

<form action= "batch.action" method="post">

用户名:

<input type= "text" name=" users " />年龄:<input type="age " name="users "><br>

用户名:

<input type= "text" name=" users " />年龄:<input type= "age" name= " users "><br>

用户名:

<input type= "text" name=" users "/>

年龄:

<input type="age " name=" users "><br>

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

</form>

</body>

验证之后,我们发现这次没有接收到数据, 当我们给属性赋值的时候,它才能显示,说明 struts 不能处理这种问题。

如果提交的是批量的对象,这时 struts 没用了,我们可以以两个数组去提交。但是这种方式不是我们想要的,这个时候可以用自定义拦截器。

之前写过一个程序来解决这种问题,现在我们在 list 中将拦截器引用一下

<packagename="default"extends="list-default" namespace="/">

<action name="add " class= "cn.sxt.action.UserAction">

<result>/incex.jsp</result>

</action>

<action name=“batch”class="cn.sxt.action. BatchAction">

<interceptor-ref name="ListStask" / >

<result> /index. jsp</ result>

</action>

</package>

再次提交,当输入的数据与最终显示的数据一致时,问题就处理完成。

对于集合对象的处理,需要自定义拦截器来实现——struts-list.jar

jsp

</body>

<form action= "batch.action" method="post">

用户名:<input type= "text" name="users.name "/>年龄:<input type="text" name="users.age"><br>

用户名:<input type= "text" name="users.name" />年龄:<input type= "text" name= "users.age"><br>

用户名:<input type= "text" name="users.name "/>年龄:<input type="text" name="users.age"><br>

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

</form>

</body>

Struts.xml 配置

<package name="default" extends="list-default" namespace="/">

<action name="batch" class= "cn.sxt.action.BatchAction,">

<interceptor-ref name="ListStask" / >

<result> /index. jsp</ result>

</action>

</package>

BatchAction

Public class BatchAction {

private List<User> users;

public string execute(){

for(User u:users){

System.out. println(u);

}

return "success";

}

public List<User> getUsers( ) {

return users;

}

public void setUsers(List<User> users) {

this.users=users;

}

}

相关文章
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch CIFAR10图像分类 Swin Transformer篇(一)
Pytorch CIFAR10图像分类 Swin Transformer篇(一)
|
Linux Shell
在Linux中如何一次性运行多个命令?
在Linux中如何一次性运行多个命令?
940 0
|
存储 缓存 固态存储
优化Elasticsearch 硬件配置
优化Elasticsearch 硬件配置
552 5
|
设计模式 测试技术
《怎样实现代码的可维护性和可扩展性》
实现代码的可维护性和可扩展性,需关注命名与注释、遵循编程规范、模块化设计、应用设计模式、编写单元测试、使用版本控制、文档化及定期重构等方面。这些措施有助于提升代码质量,促进团队协作,确保项目长期健康发展。
386 12
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
216 4
|
人工智能 调度 算法框架/工具
【AI系统】计算图的调度与执行
深度学习训练过程涉及前向计算、计算损失及更新权重参数。AI框架通过计算图统一表示训练过程,算子作为计算图的节点,由后端硬件高效执行。计算图调度包括算子间的调度、并发调度和异构调度,确保计算资源的有效利用。图执行模式分为单算子执行、整图下沉执行和图切分多设备执行,适应不同场景需求。以PyTorch为例,其算子执行通过两次调度选择合适的Kernel进行张量操作,并支持自动求导。
567 5
|
jenkins 测试技术 持续交付
基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程
基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程
1141 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue的城市公交调度系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的城市公交调度系统的详细设计和实现(源码+lw+部署文档+讲解等)
199 5
|
运维 安全 Devops
什么是安全左移,如何实现安全左移
传统软件开发面临安全挑战,如意识缺失、代码漏洞、第三方组件风险、配置管理问题及应对新型攻击能力不足。为改善现状,需采取安全左移策略,将安全措施提前至开发早期,与SDL结合,确保安全贯穿SDLC始终。安全左移面临计划制定、责任转移、工具选择等挑战,需通过规划、培训和选用合适工具应对。DevSecOps模式进一步将安全融入DevOps,提升开发效率和软件安全性,实现开发、安全和运维的协同。SDL与DevSecOps相辅相成,前者注重安全过程,后者强调安全文化与自动化。
911 1
什么是安全左移,如何实现安全左移
|
Linux 应用服务中间件 nginx
Docker 大势已去,Podman 即将崛起……
Docker 大势已去,Podman 即将崛起……
1706 0
Docker 大势已去,Podman 即将崛起……