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 ...
随机推荐
- 【剑指offer】42.和为S的两个数字
42.和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 示例: 输入:[1,2,4,7,11 ...
- easyui-textbox使用value设置默认值失效
1,使用easyu-textbox的value参数设置默认值失效,easyui-textbox放到dialog弹框中,当dialog的closed为false时,也就是打开dialog时,设置的val ...
- JavaScript学习笔记:你必须要懂的原生JS(一)
1.原始类型有哪几种?null是对象吗?原始数据类型和复杂数据类型存储有什么区别? 原始类型有6种,分别是undefined,null,bool,string,number,symbol(ES6新增) ...
- 【模拟】玩具谜题 luogu-1563
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...
- tomcat日志详解
1 tomcat 日志详解 1.1 tomcat 日志配置文件 tomcat 对应日志的配置文件:tomcat目录下的/conf/logging.properties. tomcat 的日志等级有:日 ...
- 第四篇 -- Go语言string转其他类型
1. string转int // 法1:string转int num_str := "1234567" /* ParseInt():查看文档https://studygolang. ...
- 第八篇 -- 对数据库mysql进行连接并压测
参考链接:https://blog.csdn.net/laofashi2015/article/details/81296929 工具:mysql-8.0.12-winx64,apache-jmete ...
- Windows API 简介
操作系统的作用之一就是屏蔽一些复杂的直接对硬件操作,并提供给用户一个简单明确的应用接口,类外对于一些基本的或常用的操作也以API的形式提供给用户,比如内存管理.文件管理等. 消息传递机制 消息循环是一 ...
- python errno库与socket.connect_ex()方法的结合使用
前言:一般socket链接会首选connect方法,该方法会一直尝试链接.那么今天展示下connect_ex()方法,该方法如果链接成功会返回0,失败会返回errno库中的errorcode中的key ...
- Windows Server创建域控制器
推荐选择系统镜像为windows server2016(2019有诡异的bug不能安装域控.) 1.本地域安装设置 (1)连接到windows server2016 打开服务器管理器(Server M ...