Struts2之处理请求参数
时间:2017-1-11 11:05
1、Struts2是一个MVC框架,那么分别表示什么?
View:JSP
Model:Action
Controller:Action、StrutsPrepareAndExecuteFilter
2、为什么Action既是Model又是Controller?
因为Action本身可以作为一个JavaBean。
3、在Struts2中获取请求参数有两大种(三小种)方式可以获取:
1)属性驱动(在Action中添加属性,对Action的属性进行操作)
* 直接将Action作为一个Model,就可以得到请求参数,也就是将Action作为一个JavaBean,提供get/set方法。
这种方式底层是通过反射来实现的。
> 问题1:使用Action封装请求参数,会不会存在线程安全问题?
不会,每一次请求都会生成一个Action对象。
> 问题2:使用该方式封装数据,将数据封装到Action属性中,不可能将Action对象传递给业务层。
需要单独定义JavaBean,将Action属性封装到JavaBean
示例代码:
实现原理:
1、首先为Action类提供JavaBean属性,并提供get / set方法
2、在过滤器中添加如下代码,将请求参数封装到JavaBean中:
3、在Action中使用属性
------------------------------------------------------------------------------------------------------------------
* 创建独立的Model对象,页面通过ognl表达式封装
> 在Action中声明一个JavaBean对象
> private User user;
> 提供get/set方法:public User getUser()....
> 在页面中使用ognl表达式:<input type="text" name="user.username" />
优点:简单,解决了第一种封装的问题。
缺点:在页面中使用了ognl表达式,与Struts2框架耦合度高。
示例代码:
/*
------------------------------------------------------------------------------------------------------------------
这种方式底层通过Struts2中的一个interceptor进行了封装:
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" />
@Override
// 相当于request.getParameters();
// 将参数赋值给Action中的JavaBean
------------------------------------------------------------------------------------------------------------------
2)模型驱动(在开发中应用比较多)
使用ModelDriven接口,对请求数据进行封装。
步骤:
* 声明一个JavaBean对象并且必须实例化对象。
> private User user = new User();
* Action类实现ModelDriven接口
> public class Login3Action extends ActionSupport implements ModelDriven
> public Object getModel() { return this.user; }
优点:解决了属性驱动存在的问题
* 不需要将Action封装成JavaBean
* 解决了在页面中使用ognl表达式的问题
缺点:一次只能封装一个JavaBean对象,getModel()方法只能返回一个Bean。
很多关于模型驱动的拦截器都是ModelDriven拦截器操作的:
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor
示例代码:
/*
实现原理:
1、在Action中声明一个初始化的JavaBean对象。
2、实现ModelDriven接口
3、重写getModel()方法
4、在拦截器中实现如下代码:
——将请求参数封装到集合(了解)
原理:使用ognl表达式实现。
1、将数据封装到List集合
页面:
用户名1:<input type="text" name="users[0].username" /><br/>
Action类:
private List<User> users;
get / set方法
2、将数据封装到Map集合
页面:
用户名1:<input type="text" name="users['aaa'].username" /><br/>
Action类:
private Map<String, User> users;
get / set方法
——总结
1、Action接收请求参数
* 关于Struts2中的MVC
* 属性驱动
> 直接将Action作为JavaBean。
> Action中封装JavaBean,在页面上需要使用ognl表达式来给组件起名。
* 模型驱动
> 让Action实现ModelDriven接口,重写getModel()方法实例化一个JavaBean对象,该方法返回的就是实例化的JavaBean对象。
* 关于请求参数封装到集合
> List
> Map
Struts2之处理请求参数的更多相关文章
- struts2 action接收请求参数和类型转换
1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架) V:jsp M:action C:action ...
- struts2框架之请求参数(参考第二天学习笔记)
获取请求参数 请求参数:表单中的数据,或者是超链接中的数据. 1. 得到request,再通过request来获取.2. 属性驱动 在Action中提供与表单字段名称相同的属性即可. 而一个名为par ...
- struts2-Action处理请求参数
struts2 和 MVC 定义关系 StrutsPrepareAndExecuteFilter : 控制器 JSP : 视图 Action : 可以作为模型,也可以是控制器 struts2 Acti ...
- Struts2请求参数校验
校验的分类 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,通过Java代码 完成校验 struts2 ...
- 请求参数到表述层的类型转换——Struts2
一.简介 说明:HTTP 协议传输数据没有类型的概念,在服务器端是通过 request.getParameter().request.getParameterValue() 方法得到请求参数为 Str ...
- struts2视频学习笔记 11-12(动态方法调用,接收请求参数)
课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...
- 十一、Struts2封装请求参数的方式
十一.Struts2封装请求参数的方式 方式一.Action 本身作为model对象,通过成员setter封装(一个名字为params的拦截器干的) 注意:表单中的名称要和动作类中的名称一致(这是必须 ...
- struts2之请求参数接收
struts2之请求参数接收 1. 采用基本类型接受请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名的属性.请求路径:http:/ ...
- struts2获取请求参数的三种方式及传递给JSP参数的方式
接上一篇文章 package test; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; impo ...
随机推荐
- python + pytest 基本使用方法(Fixture)
#firtures通常用来对测试方法.测试函数.测试类和整个测试文件进行初始化或还原测试环境# setup_module/teardown_module:在当前文件中,在所有测试用例执行之前与之后执行 ...
- 搭建kerberos和NTP服务器以及安全的NFS服务
说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独搭建Kerberos和NTP时钟服务的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需 ...
- Python基础之用tkinter写界面
参考链接:https://blog.csdn.net/qq_37482202/article/details/84201259 Tkinter介绍 Tkinter(也叫Tk接口)是Tk图形用户界面工具 ...
- 小鹤双拼win10一键恢复布局
起因 一直用的小鹤双拼布局,最近重装系统又要重新配置,麻烦 尝试 查找对应注册表设置,找到以下路径包含相应配置 HKEY_CURRENT_USER\Software\Microsoft\InputMe ...
- 面试问题记录 二 (数据库、Linux、Redis)
面试问题记录 二 (数据库.Linux.Redis) 前言 接着上次的面试问题记录,在最后还有几道问的数据结构方面的知识点要补充 还是那句话:如果文中解释有明显错误,劳烦请及时指正我,在这不胜感激!! ...
- netcore一键nssm发布为windows服务
AntDeploy 是我开发一款开源一键部署工具包 发布功能支持: docker容器一键部署 docker镜像一键发布 支持iis一键部署 windows服务一键部署 linux服务一键部署 支持增量 ...
- 解决iOS上网页滑动不流畅问题
body { overflow:auto; /* 用于 android4+,或其他设备 */ -webkit-overflow-scrolling:touch; /* 用于 ios5+ */ }说明: ...
- 自学linux——6.安全外壳协议(ssh服务)
ssh服务 ssh(secure shell)安全外壳协议:远程连接协议,远程文件传输协议 1.协议使用端口号默认:22 若要修改,则修改ssh服务的配置文件/etc/ssh/ssh_config a ...
- time_formatter writeup
攻防世界time_formatter writeup UAF漏洞和命令注入. 前置知识 1.strdup函数 char * __strdup(const char *s) { size_t len = ...
- pwnable.kr之unlink
pwnable.kr之unlink 之前在看别的东西,学习的随笔也没有写完......颓了几天. 由于最近在看堆,就把pwnable.kr上unlink这道题做一下,学习一下. 1.程序分析 #inc ...