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接收请求参数的更多相关文章

  1. Struts框架(6)---action接收请求参数

    action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...

  2. struts2 action接收请求参数和类型转换

    1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架)         V:jsp        M:action         C:action  ...

  3. action接收请求参数

    一.采用基本类型接收请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性. action的代码: public class Pa ...

  4. Struts2学习笔记(六)——Action处理请求参数

    在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...

  5. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API        1. 在Action类中也可以获取到Servlet一些常用的API        * 需求:提供JSP的表单页面的数据,在Ac ...

  6. Struts2笔记2--动态方法调用和Action接收请求方式

    动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确): LoginAction类中有两个方法some和second 1. 动态方法的调用(修改常量struts.enable.Dynam ...

  7. struts2视频学习笔记 11-12(动态方法调用,接收请求参数)

    课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...

  8. Struts2基础-3 -继承ActionSupport接口创建Action控制器+javaBean接收请求参数+ 默认Action配置处理请求错误 + 使用ActionContext访问ServletAPI

    1.目录结构及导入的jar包 2.web.xml 配置 <?xml version="1.0" encoding="UTF-8"?> <web ...

  9. SpringMVC——接收请求参数和页面传参

    Spring接收请求参数: 1.使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

随机推荐

  1. Apache 重启时会有报 AH00558

    AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0 ...

  2. iOS Run loop使用实例

    http://blog.csdn.net/libaineu2004/article/details/45364737 一.Runloop简介: Run loops 是线程相关的的基础框架的一部分.一个 ...

  3. Vue.js实例

    构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm = new Vue({ // 选项 })

  4. iOS开发——设备信息小结(未完待续...)

    1.获取设备的信息  UIDevice *device = [[UIDevice alloc] init]; NSString *name = device.name;       //获取设备所有者 ...

  5. webstorm快捷键说明

    webstorm快捷键说明 Editing编辑相关快捷键 Ctrl + Space:Basic code completion (the name of any class, method or va ...

  6. 使用getParameterMap()方法实现对请求参数的封装的工具类

    我们知道,HttpServletRequest这个类的getParameter(name),getParameterValues(name)可以分别实现对页面传来的单个参数和对多个同名参数的接受.特别 ...

  7. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言

    前    言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...

  8. c# 正则表达式的用户

    Regex emailregex = new Regex("(?<user>[^@]+)@(?<host>.+)"); if(emailregex.IsMa ...

  9. 【腾讯优测干货分享】微信小程序之自动化亲密接触

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/HcPakz5CV1SHnu-U8n85pw 导语 山雨欲来风满楼,最 ...

  10. windows(win10)下的mysql解压版安装

    1. 到mysql官网 下载mysql : http://dev.mysql.com/downloads/mysql/   ,会提示登陆,注册一个就行了,公司名什么的随便填. 注意区分32,64位.我 ...