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 ...
随机推荐
- Java的代理模式
最近在学习Spring,关于Spring AOP的代理模式不是很了解,看了一篇博文就懂了. https://www.cnblogs.com/cenyu/p/6289209.html Java的三种代理 ...
- 【洛谷P1281 书的复制】二分+动态规划
分析 两个做法,一个DP,一个是二分. 二分:也就是二分枚举每个人分到的东西. DP:区间DP F[I][J]表示前i本书分给j个人用的最短时间 由于每一次j的状态由比j小的状态得出,所以要先枚举j, ...
- 第二十八篇 -- 写一个简陋的WIFI服务器界面
效果图: Dlg.cpp // WIFIWMITestDlg.cpp : implementation file // #include "stdafx.h" #include & ...
- salesforce Integration 概览(一) 杂篇
本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 我们在做sales ...
- appium的安装和环境配置教程
模拟器安装 夜神模拟器下载地址:https://www.yeshen.com/ 无脑安装 jdk环境 安装jdk 安装教程:https://www.cnblogs.com/yhoil/p/148086 ...
- http request 请求拦截器,有token值则配置上token值
// http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...
- CentOS 永久修改系统时间
1.查看当前系统时间 date 2.修改当前系统时间 date -s "2018-2-22 19:10:30 3.查看硬件时间 hwclock --show ...
- 卷向字节码-Java异常到底是怎么被处理的?
你好呀,我是why,你也可以叫我歪歪. 比如下面这位读者: 他是看了我<神了!异常信息突然就没了?>这篇文章后产生的疑问. 既然是看了我的文章带来的进一步思考,恰巧呢,我又刚好知道. 虽然 ...
- GitHub标星8k,字节跳动高工熬夜半月整理的“组件化实战学习手册”,全是精髓!
前言 什么是组件化? 最初的目的是代码重用,功能相对单一或者独立.在整个系统的代码层次上位于最底层,被其他代码所依赖,所以说组件化是纵向分层. 为什么要使用组件化? 当我们的项目越做越大的时候,有时间 ...
- mapboxgl 互联网地图纠偏插件(三)
先说结论,结论当然是:大功告成,喜大普奔.看效果图: 好了,接下来说一下过程 先回顾一下这个系列的第一篇和第二篇 第一篇是直接改的 mapboxgl 源码,在源码里面对瓦片的位置进行纠偏,遇到的问题是 ...