Struts框架(6)---action接收请求参数
action接收请求参数
在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法。
Struts2 提供三种数据封装的方式:
(1) Action 本身作为model对象,通过成员setter封装
(2) 创建独立model对象,页面通过ognl表达式封装
(3) 使用ModelDriven接口,对请求数据进行封装(推荐)
下面我们来讲解第一种:
(1) Action类本身作为model对象通过成员的setter方法封装(属性驱动)
setXxx()的xxx必须与请求的参数名一样。就是指和form表单中的name对应的属性要一致
action类的代码:
import java.util.Arrays;
import com.ssh.struts2.model.User;
import com.opensymphony.xwork2.ActionSupport;
/*
* 通过这种方法最简单,但也有缺点如果要把数据封装到model对象中然后传递给业务层和数据层
* 还需要单独定义model对象进行传递数据
*/
public class RegisterAction1 extends ActionSupport { private String username;
private String [] hobby; @Override
public String execute() throws Exception {
//获取表单的数据
System.out.println("用户名是:"+username);
System.out.println("兴趣爱好是:"+Arrays.toString(hobby));
return null;
}
//这里必须提供set方法,get方法可有可无
public void setUsername(String username) {
this.username = username;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
}
/*当你在界面中用户名输入:zhangsan,兴趣爱好选择:体育和读书那么运行结果如下:
* 用户名是:zhangsan
* 兴趣爱好是:[sport, read]
*/
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="default" extends="struts-default">
<action name="register1" class="com.ssh.struts2.action.RegisterAction1">
</action>
</package>
</struts>
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<h4>注册表单1 </h4>
<form action="${pageContext.request.contextPath }/register1.action" method="post">
用户名:<input type="text" name="username"><br/>
爱好:<input type="checkbox" name="hobby" value="sport">体育
<input type="checkbox" name="hobby" value="music">音乐
<input type="checkbox" name="hobby" value="read">读书 <br/>
<input type="submit" value="注册">
</form>
</body>
</html>
网页:

(2) 创建独立model对象,页面通过ognl表达式封装
该方法首先要创建一个专门的领域对象进行封装
User领域对象
import java.util.Arrays;
public class User { private String username;
private String [] hobby;
//为这两个常量提供set和get方法和toString方法
Action类
import com.ssh.struts2.model.User;
import com.opensymphony.xwork2.ActionSupport; public class RegisterAction2 extends ActionSupport{
//直接定义model对象
private User user;
@Override
public String execute() throws Exception {
System.out.println("user:"+user);
return NONE;
}
/*
* 必须提供get方法
* 封装第一个参数 创建一个新的User对象 然后把username属性封装到这个创建的user对象中 User user =new User();user.setUserName("");
* 封装第二个参数 已经存在user对象 User user =getUser(); user.setPassword(");
*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
/*
* 如果jsp界面输入:用户名:aa 兴趣爱好:体育读书
* 后台输出:user:User [username=aa, hobby=[sport, music]]
*/
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<!-- 用ognl表达式要注意的一点就是,标签的属性name在取名字的时候是:领域对象.属性
user.username这里user是具体的对象,username是领域对象的属性-->
<h4>注册表单1 </h4>
<form action="${pageContext.request.contextPath }/register2.action" method="post">
用户名:<input type="text" name="user.username"><br/>
爱好:<input type="checkbox" name="user.hobby" value="sport">体育
<input type="checkbox" name="user.hobby" value="music">音乐
<input type="checkbox" name="user.hobby" value="read">读书 <br/>
<input type="submit" value="注册">
</form>
</body>
</html>
说明:struts2首先通过反射技术调用User的默认构造器创建User对象,然后通过反射技术调用User中与请求参数同名的属性的setter方法来获取请求参数值。在这里需要注意的一点是:User对象一定要有默认的构造器。
采用复合类型接收请求参数的好处,可以减少action中的setter和getter方法,同时可以把相应的属性组合成一个类,这样使代码更好清晰,代码有更好的结构。
(3)使用ModelDriven接口,对请求数据进行封装
第三种方法比较方便,和方法(1)不同在于它也要先创建一个领域对象类进行对象的封装。其它和方法(1)一样
Action类
import com.ssh.struts2.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
//实现ModelDriven<User>接口
public class RegisterAction3 extends ActionSupport implements ModelDriven<User> {
/**
* 方式三 使用模型驱动
*/
//这里需要注意,方法2中的user对象不需要自己创建,而这里必须手动初始化
private User user =new User(); public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println("user:"+user);
return NONE;
}
}
/*
* 如果jsp界面输入:用户名:aa 兴趣爱好:体育读书
* 后台输出:user:User [username=aa, hobby=[sport, music]]
*/
最后我们来思考两个问题,也是常见的笔面试题:
问题一:Action封装数据会不会有线程问题?
问题二:在使用第一种方式进行封装的时候数据封装到Action 属性中不能把Action传递给业务层数据如何传递?
谢谢大家浏览,欢迎大家指点!
Struts框架(6)---action接收请求参数的更多相关文章
- Struts系列笔记(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- struts2 action接收请求参数和类型转换
1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架) V:jsp M:action C:action ...
- action接收请求参数
一.采用基本类型接收请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性. action的代码: public class Pa ...
- Struts2之Action接收请求参数和拦截器
技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Ac ...
- Struts2笔记2--动态方法调用和Action接收请求方式
动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确): LoginAction类中有两个方法some和second 1. 动态方法的调用(修改常量struts.enable.Dynam ...
- Struts2基础-3 -继承ActionSupport接口创建Action控制器+javaBean接收请求参数+ 默认Action配置处理请求错误 + 使用ActionContext访问ServletAPI
1.目录结构及导入的jar包 2.web.xml 配置 <?xml version="1.0" encoding="UTF-8"?> <web ...
- struts2视频学习笔记 11-12(动态方法调用,接收请求参数)
课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...
- Struts2学习笔记(六)——Action处理请求参数
在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...
- springMVC中接收请求参数&&数据转发
### 1. 接收请求参数 #### 1.1. [不推荐] 通过HttpServletRequest获取请求参数 假设存在: <form action="handle_login.do ...
随机推荐
- python爬虫-上期所持仓排名数据爬取
摘要:笔记记录爬取上期所持仓数据的过程,本次爬取使用的工具是python,使用的IDE是pycharm 一.查看网页属性,分析数据结构 在浏览器中打开上期所网页,按F12或者选择表格文字-右键-审查元 ...
- 优雅的找出ArrayList中重复的元素
https://blog.csdn.net/caoxiaohong1005/article/details/54286384
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第9周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第9周学习总结 教材学习内容总结 下载安装MySQL数据库管理系统. 学习<Java程序设计>第十一章MyS ...
- CSS基础一
css作用 css将内容和样式相分离,便于修改样式.HTML 写网页的内容,CSS写内容的样式 CSS构成 p{ /*p为标签,也可以称为选择器,选择包住的内容的格式*/ font-size:12px ...
- window下github的学习心得
准备工作: 安装git: 1.下载地址:http://msysgit.github.io/ 2.安装:本人是一路next的,现在没发现有什么问题.详细的安装过程参考:https://jingyan.b ...
- Verilog有符号数处理
内容主要摘自以下两个链接: https://www.cnblogs.com/LJWJL/p/3481995.html https://www.cnblogs.com/LJWJL/p/3481807 ...
- alfred3配置
搜索功能配置 github https://github.com/search?utf8=%E2%9C%93&q={query} github'{query}' g baidu http:// ...
- Excel VBA(宏):添加宏
写在前面: .编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...
- 支持Linux,嗅探和注入功能的网卡
支持的WiFi USB 以下是已知可以很好地支持Linux,嗅探和注入功能,外部天线(可以替换)和强大的TX功率以及良好的RX灵敏度的Wifi卡的列表 TP-LINK TL-WN722N(仅限卷1) ...
- JS 将canvas画布保存到本地
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...