基于Struts2的参数传递方法研究


利 用 U L进 行 参 数 传 递 是最 简单 的一 种 参 数 传 递 方 式 ,通 过 U L可 以很 方 便 的 页 面 之 间 切 换 并 传 递 参 数 ,无 需 额 外 的处 R R 理 , 常 情 况 下 , 能 不 会 有所 损 失 。但 通 过 U L传 递 参 数 , 数 类 型 必 须 为 字 符 类 型 , 参数 长 度 受 限 。同 时 , 户 可 以修 改 U L 正 性 R 参 且 用 R
ZEN G e ,HU A N G e —pi W i W i ng
( ia ie i f e si cs B i g 1 0 8 , hn ) Ch v r t o oc n e, e i 0 0 3 C i n Un sy G e j n a Ab ta t P r t a igi ie i bei epo rs o b poe t e e p n , n l eyi ot t T ea i l i y i s c : aa e p sn v a l nt r ge f r me r s s n t h s we rjc d v l me t a d i i a ov r o ts s mp r n . h r c n — a t a ma l n t d c s h to so a igp r t ae H Sr t , n o ie t tdy s s p p l c n l y A a , a a s r r u e teme d f sn aa e b sd O t s a d c mb d wi o a mot o ua t h oo - jx wecn t nf o h ps me r u 2 n h re g r e d t b t e p a d a a a dme t h e d o e r et a d te c i eag o s x e e c . a e a wenj n v , n e ten e s f h o c, n n ahe o du e e p r n e s J t p j h v r i Ke r s p rme r a ig URL OG ; j ; W R;Qu r ywo d : a a t sn ; eps ; NL A a D x j e y 参数传递是 We b项 目开 发 } 常重 要 的 部 分 ,该 文 主 要 讲 述 Sr t t s u 2中 各 种 参 数 传 递 方 式 。参 数 传 递 的 过 程 主 要 指 数 据 从
l SSN 1 009 044 -3
E m i xj cc . t H — al s @ cc e. : l n C
ht:w t / ww.n s e.n p/ d z. t n c
Te : 6—5 —5 09 5 09 4 l+8 51 69 63 69 6
Co mpue n wld n e h oo y电 脑 知 识 与 技术 trK o e gea d T c n lg
符 串能 够 转 化 成 各 种 J v a a对 象 。
1Sr t2的参数 传递 方法 tus
11URL传 递方 式 .
U L 统 一 资 源 定 位 符 . n bm / nv r l eo reL e t R ( U i r U i s su c o a r的 缩 写 ) 被 称 为 网 页 地 址 , 因 特 网上 标 准 的 资 源 的 地 址 ( d l eaR o 也 是 A — de S 、已 经被 万维 网联 盟 编 制 为 因特 网 标 准 R C1 3 。 rS1 F 7 8
Vo . , . 4 1 No3 ,De e l e 01 , P.7 7 77 6 c n b r 2 P 9 7 —9 9 0
பைடு நூலகம்
基 于 S r t2的参数 传 递 方 法研 究 tu s
曾 黄维 威, 平
( 罔 地 质 大 学 , 京 10 8 中 北 0 0 3)
摘要 : We 在 b项 目开 发过 程 中 参数 传 递 是 不 可避 免 的 , 是 非 常 重要 的 。该 文主 要 介 绍 在 基 于 S us 也 tt r 2的 we b项 目开 发 q 的参 数 传 -
递方法 . 并结 合 当前 热 门的 A a 术 , jx技 实现 j s p页 面和 Jv 代 码 的& - 递 , aa N传 以满 足 项 目的 开 发 需 求 和 艮好 的 用 户体 验 。
关键词 : 数传递 ; 参 URL OG ; NL;J x; R ; ey AA DW j r Qu
所 带 参 数 , 此 通 过 U L传 递 参 数 具 有 安 全 隐 患 。 R 在 项 目开发 的过 程 t ' 往 需 要 在 i f往 1 s p页 面 中 向 a t n传 递 一 些 必 要 的 参 数 , 便 在 a t n【 根 据需 要 进 行 处 理 , 在 一 个 显 ci o 以 ci f o 1 像
中图 分 类 号 : P3 1 T 1 文献标识码 : A 文章 编 号 : 0 9 3 4 ( 0 0 3 — 7 7 0 1 0 - 0 42 1 )4 9 7 - 3
M e ho fPa sng t dso s i Par m ee a t r Bas d i r s e OlSt ut2
Ve iw层 传 递 到 C nrl 时 Srt ot 层 o t s u 2的T 作 方 式 。Srt t s 成参 数传递处理 工作的基础是 O N u 2完 G L和 V letc 。 而 在 这 个 过 程 中 , a Sak u Srt t u 2对 O 【操作 进 行 封 装 , GN 完成 O N G L表 达 式 到 Jv aa对 象 的传 递 , 参 数 传 递 的过 程 中 , 恰 当 的类 型转 化 , 证 页 面 上 的 字 在 做 保
合集下载

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利⽤原理及OGNL机制Struts2漏洞利⽤原理及OGNL机制研究概述在MVC开发框架中,数据会在MVC各个模块中进⾏流转。

⽽这种流转,也就会⾯临⼀些困境,就是由于数据在不同MVC层次中表现出不同的形式和状态⽽造成的:View层—表现为字符串展⽰数据在页⾯上是⼀个扁平的、不带数据类型的字符串,⽆论数据结构有多复杂,数据类型有多丰富,到了展⽰的时候,全都⼀视同仁的成为字符串在页⾯上展现出来。

数据在传递时,任何数据都都被当作字符串或字符串数组来进⾏。

Controller层—表现为java对象在控制层,数据模型遵循java的语法和数据结构,所有的数据载体在Java世界中可以表现为丰富的数据结构和数据类型,你可以⾃⾏定义你喜欢的类,在类与类之间进⾏继承、嵌套。

我们通常会把这种模型称之为复杂的对象树。

数据在传递时,将以对象的形式进⾏。

可以看到,数据在不同的MVC层次上,扮演的⾓⾊和表现形式不同,这是由于HTTP协议与java的⾯向对象性之间的不匹配造成的。

如果数据在页⾯和Java世界中互相传递,就会显得不匹配。

所以也就引出了⼏个需要解决的问题:1.当数据从View层传递到Controller层时,我们应该保证⼀个扁平⽽分散在各处的数据集合能以⼀定的规则设置到Java世界中的对象树中去。

同时,能够灵活的进⾏由字符串类型到Java中各个类型的转化。

2.当数据从Controller层传递到View层时,我们应该保证在View层能够以某些简易的规则对对象树进⾏访问。

同时,在⼀定程度上控制对象树中的数据的显⽰格式。

我们稍微深⼊思考这个问题就会发现,解决数据由于表现形式的不同⽽发⽣流转不匹配的问题对我们来说其实并不陌⽣。

同样的问题会发⽣在Java世界与数据库世界中,⾯对这种对象与关系模型的不匹配,我们采⽤的解决⽅法是使⽤如hibernate,iBatis等框架来处理java对象与关系数据库的匹配。

现在在Web层同样也发⽣了不匹配,所以我们也需要使⽤⼀些⼯具来帮助我们解决问题。

Struts2技术详解

Struts2技术详解

Struts2技术详解1, 当Action设置了某个属性后,Struts将这些属性封装一个叫做Struts.valueStack的属性里。

获取valueStack对象:ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");调用ValueStack 的vs.findValue("books")方法(books为Action中的属性);2, struts2的Action类是一个普通的POJO 类(通常包含一个无参的execute方法)从而很好的重用代码。

4,struts2通常直接使用Action来封装HTTP请求参数,所以Action中要定义与请求参数对应的属性,并且为该属性提供相应的getter和setter方法。

5,即使Action需要处理的请求name和pass两个HTTP请求参数,Action类也可以不包含name和pass属性,因为系统是通过对应的getter和setter方法来处理请求参数。

而不是通过属性来处理请求参数的。

所以Action类是否包含name和pass属性不重要,重要的是需要setter和getter方法。

6,Action类的属性,不仅可以封装请求参数,还可以用于封装处理结果,通过Struts2标签来输出对应的属性值。

如<s:Property value="tip">。

7,ActionContext类。

Struts2的Action并未直接与任何Servlet api耦合,从而更加方便测试该Action(可以通过脱离web容器测试Action)。

但是对于Web应用的控制器来说,不访问Servlet api 几乎是不能的。

例如跟踪HTTP session状态等。

访问的Servlet Api 就是HttpServeltRequest、HttpSession、ServletContext,这三个类分别jsp内置对象中的request、session、application。

Struts2--result页面跳转forward--get方式和post方式的获取参数

Struts2--result页面跳转forward--get方式和post方式的获取参数

Struts2--result页⾯跳转forward--get⽅式和post⽅式的获取参数⼀.总体概述这篇⽂章是写基于struts2(整合了ssh)的2个页⾯之间的跳转传参。

突然这天想到,struts2的result有很多的type类型(跳转,重定向,。

),于是就回忆起,跳转和重定向的不同(跳转地址栏不变,共享参数;重定向地址栏改变,不再共享参数)。

⼼⾥好奇,struts2⾥页⾯跳转的时候,get的⽅式提交时怎么再第⼆个页⾯获取参数的,post是怎么在第⼆个页⾯获取参数的。

重定向⼜是怎么样的呢?真的抱歉,我今天花了⼀天时间,只弄清楚了页⾯跳转,关于页⾯重定向传参明天再搞。

本来这篇博客都没有的,因为我写了⼀半了,把get⽅式的写好了,搞post⽅式的时候太久了。

回到这个页⾯不⼩⼼把前⾯的写的删了,写了新的话,⼀瞬间反应过来,晚了,⾃动保存了。

时间宝贵者,可以直接看正⽂的第2部分⼆.正⽂1.get⽅式提交,页⾯跳转后,在后者页⾯获取参数。

(1)先是在start.hml页⾯,⽤get⽅式提交数据(username,password)到ForwardAction,然后这个action返回SUCCESS(execute⽅法⾥没有处理任何东西,只是返回SUCCESS),然后根据定义的result(name为success)采⽤type=dispatcher(即页⾯跳转)的⽅式,跳转到后者页⾯end.html。

在end.html很简单就能取到start.html页⾯上传的参数,因为页⾯跳转地址栏没变化,⽽且get⽅式还是显⽰上传参数和值的,这样我们只要⽤js去解析地址栏,获取其中的上传参数就⾏了。

思路说道这⾥很多⼈应该就懂了,其实get⽅式的提交就变成了怎么⽤js去解析地址栏获取上传参数。

由于之前写的不⼩⼼覆盖了,现在也很晚了,这个也简单,没办法明天有时间补上来。

(2)代码:①:start.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form action="forget" method="get"><table style="width:300px;height:150px;border:1px solid red;"><tr><td>username:</td><td><input name="username"></td></tr><tr><td>password:</td><td><input name="password"></td></tr><tr><td colspan="2"><input type="submit" value="get⽅式跳转页⾯"></td></tr></table></form></body></html>②:ForwardActionpackage com.st.action;import java.util.HashMap;import java.util.Map;import com.opensymphony.xwork2.ActionSupport;import net.sf.json.JSONObject;public class ForwardAction extends ActionSupport {private String username;//上传参数:usernameprivate String password;//上传参数:passwordpublic String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}//下⾯这个⽅法是处理start提交的请求的,其实没有处理任何事,因为它的业务只是要跳转到end页⾯public String execute(){System.out.println("I have entered execute");return SUCCESS;}}③struts.xml<!-- 对应的就是ForwardAction,bean的实例化是交由spring管理的 --><package name="mytest" extends="struts-default"><action name="forget" class="forwardaction" method="execute"><result name="success">end.html</result></action></package>④end.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><script src="js/jquery-3.1.1.js"></script></head><body><table style="width:400px;height:200px;border:1px solid red;"><tr><td>接收的参数username:</td><td><div id="username" style="color:red;"></div></td></tr><tr><td>接收的参数password:</td><td><div id="password" style="color:red;"></div></td></tr><tr><td><input type="submit" value="点我接收get⽅式跳转过来的参数" onclick="me()"></td></tr></table><script>//⽤正则表达式的⽅式从地址栏获取参数值function getQueryString(name){var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");var r=window.location.search.substring(1).match(reg);if(r!=null){return unescape(r[2]);}else{return null;}}//简单的调⽤上⾯的函数,并且显⽰下参数值function me(){$('#username').html(getQueryString('username'));$('#password').html(getQueryString('password'));}</script></body></html>(3)相关截图2.post⽅式提交,页⾯跳转后,在后者页⾯获取post⽅式上传的参数(1)概述:这个我也是觉得get⽅式能获取,post是地址栏看不见的,那该怎么获取呢,能获取吗?我去百度搜了,很多“不能”“不知道,没试过”“通过ajax”,但是说实话,说的很模糊。

01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。

轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。

Struts2实现了MVC,满足了MVC设计思想。

在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。

作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。

这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。

Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。

重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。

1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。

它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。

1、M-Model 模型模型(Model)的职责是负责业务逻辑。

包含两层:业务数据和业务处理逻辑。

比如实体类、DAO、Service都属于模型层。

2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。

属于视图的组件是不包含业务逻辑和控制逻辑的JSP。

3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。

比如:在Servlet项目中的单一控制器ActionServlet。

struts2_传值方式

struts2_传值方式

struts2 传值方式如何把登陆页面中的用户名传递到登录成功的页面中呢有三种方式,1,使用默认的action的传递方式。

2,自定义一个vo,在action中使用这个vo3,使用ModelDriven的方式。

下面分别叙述。

1,使用默认的action的传递方式。

action文件如下:package struts2.login;public class LoginAction {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String execute() {System.out.println (LoginAction.class.hashCode());if (username.equalsIgnoreCase("aaa") &&password.equals("aaaaaa")) {return "loginSuc";}else {return "loginFail";}}}登陆成功的文件如下:<%@ page contentType="text/html; charset=gb2312" %><%@ taglib uri="/struts-tags" prefix="s"%><meta http-equiv="content-type" content="text/html;charset=gb2312"> 欢迎您,<s:property value="username" /> 登录成功。

struts2接收参数的5种方法

struts2接收参数的5种方法

struts2接收参数的5种⽅法这⾥总结下Struts2接收参数的5种⽅法。

1. 使⽤Action的属性在action⾥⾯定义要接收的参数变量,并提供相应的setter,getter。

定义的参数变量需要和提交参数的名称⼀致。

并不⽤做数据类型的转换,相应提交⽅式可以⽤get和post。

简单举例如:login.action?name=yanggb&password=123456jsp:<form action="login" method="post" name="form1">⽤户名:<s:textfield name="username"/><br/>密码:<s:password name="password"/><br/><s:submit value="提交"/></form>action:public class LoginAction extends ActionSupport {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}这样,在Action就能接收到前端的请求参数。

2. 使⽤DomainModel使⽤这种⽅式,在Action⾥⾯就不⽤定义很多的属性,⽽是⽤Model层⽤到的模型,保存它的⼀个对象。

解决Struts2拦截器的对于参数传递无效问题

解决Struts2拦截器的对于参数传递无效问题解决Struts2拦截器的对于参数传递无效问题2012-12-14 20:27 来源:CSDN 作者:chenssy 字号:T|T[摘要]本文介绍解决Struts2拦截器的对于参数传递无效问题,并提供简单的示例代码供参考。

今天做项目时,使用拦截器对用户权限检查。

拦截器本身没有问题,可是实现权限拦截,但是传递的参数全部都无效了。

搞了很久,由于对拦截器的内部机制不是特别熟悉,所以重新研读了一下Struts2的拦截器。

找到了原因:给一个Acton配置一个自定义拦截器后,此action就无法使用框架默认的拦截器栈了,这就导致前后台数据传输无效。

解决方法一般有两种:一、显示的使用默认拦截器<action name="enterSystem_*" class="enterSystemManager" method="{1}"><!-- 使用拦截器:进行权限检查 --><interceptor-ref name="defaultStack" /><interceptor-ref name="autority" /><result name="workerMangerUI">/WEB-INF/page/backstage/system/workerManager.jsp</result> <result name="positionMangerUI">/WEB-INF/page/backstage/system/positionManager.jsp</result> </action>二、使用<interceptor-ref name="params" />让参数先传递<action name="enterSystem_*" class="enterSystemManager" method="{1}"><!-- 使用拦截器:进行权限检查 --><interceptor-ref name="params" /><interceptor-ref name="autority" /><result name="workerMangerUI">/WEB-INF/page/backstage/system/workerManager.jsp</result> <result name="positionMangerUI">/WEB-INF/page/backstage/system/positionManager.jsp</result> </action>。

struts2的Action参数详细说明

Struts2 Action参数详细说明1,Action的配置格式基本为:<package name="包名字" extends="继承的包" namespace="空间名" > <action name="访问的名称" class="处理请求的类"><result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result> </action></package>如:<package name="aa" extends="struts-default" ><action name="myaa" class="com.test.MyAction"><result name="success">/test/msg.jsp</result></action></package>访问时:<a href="myaa.action" >访问myaaAction</a>2,method属性,该属性可以把一个类的多个方法映射为多个Action,如:类文件public class MethodAction extends ActionSupport{public String add(){return SUCCESS;}public String delete(){return SUCCESS;}public String modify(){return SUCCESS;}public String query(){return SUCCESS;}}struts.xml配置文件:<action name="访问的方法名" class="处理的类" method="处理的方法名"> <result name="结果页名">结果页面</result></action><action name="add" class="com.struts2.chen.MethodAction" method="add"> <result name="success">/method/addRes.jsp</result></action><action name="delete" class="com.struts2.chen.MethodAction" method="delete"> <result name="success">/method/deleteRes.jsp</result></action><action name="modify" class="com.struts2.chen.MethodAction" method="modify"> <result name="success">/method/modifyRes.jsp</result></action><action name="query" class="com.struts2.chen.MethodAction" method="query"> <result name="success">/method/queryRes.jsp</result></action>页面:<a href="add.action">增加</a><br /><a href="delete.action">删除</a><br /><a href="modify.action">修改</a><br /><a href="query.action">查询</a><br />3。

action之间的参数传递和结果类型

struts2的action之间的参数传递和结果类型action的默认结果类型是dispatcher,而action之间发送请求是不能直接用该结果类型的。

一般来说,可选的结果有redirect、redirectAction、chain。

前两种都是属于页面跳转,也就是说,发送请求以后,地址栏的地址会刷新为被请求的action的地址,而chain则不会更新地址。

redirect-action:“这个Result使用ActionMapperFactory提供的ActionMapper来重定位浏览器的URL来调用指定的action和(可选的)namespace.这个Result比ServletRedirectResult要好.因为你不需要把URL编码成xwork.xml中配置的ActionMapper提供的模式. 这就是说你可以在任意点上改变URL模式而不会影响你的应用程序.因此强烈推荐使用这个Result而不是标准的redirect result来解决重定位到某个action的情况.”---webwork2的说法。

redirect:“调用{@link HttpServletResponse#sendRedirect(String) sendRedirect}方法来转到指定的位置。

HTTP响应被告知使浏览器直接跳转到指定的位置(产生客户端的一个新请求). 这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失, 不再可用。

”简单说,两者的共同点是,*地址栏会变化,所有前一个action的请求参数都会丢失,当然也包括action的属性值也会丢失。

*路径写法稍有不同,redirectAction请求下一个action时,不带后缀.action,而redirect和普通URL写法一致。

*redirectAction支持param来附加请求参数,但是这往往会导致ServletActionRedirectResult 报找不到xxx属性的警告,这大概是由于无法识别是IOC注入,还是参数附加URL导致的,虽然是W ARN级别,不过宁可写成xxx?a=x&b=y的形式,而&还需要写作&amp;的格式,否则会报xml格式错误。

Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射

return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
er = user;
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
或者使用myeclipse经常用的,指定basePath。
Action Method
配置:
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="erAction" method="add">
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档