【Struts2框架】第三节OGNL表达式-OGNL表达式例子

Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量

<s:property value="cat.name"/>

例1:

struts.xml:

<package name="ognl" namespace="/ognl" extends="struts-default">
	<action name="og1" class="cn.edu.hpu.action.OgnlAction1">
	<result>/ognl.jsp</result>
	</action>
</package>

OgnlAction1.java:

package cn.edu.hpu.action;

import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction1 extends ActionSupport{

	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return super.execute();
	}
}

访问链接:

<a href="<%=basePath%>ognl/og1?username=jack&&password=111" >OGNL</a><br/>

结果界面:

OGNL SUCCESS!!<br/>
    <ol>
    	<li>访问值栈中的action的普通属性1=<s:property value="username"/></li>
        <li>访问值栈中的action的普通属性2=<s:property value="password"/></li>
    </ol>
    <s:debug></s:debug>

结果显示:
OGNL SUCCESS!!
访问值栈中的action的普通属性1=jack
访问值栈中的action的普通属性2=111
[Debug]

ps:
点击[Debug]可以查看到栈值中有username与password

例2:

struts.xml:

<package name="ognl" namespace="/ognl" extends="struts-default">
 <action name="user2" class="cn.edu.hpu.action.UserAction2" method="add">
     <result name="success">/ognl.jsp</result>
   </action>
</package>

UserAction2.java:

package cn.edu.hpu.action;

import cn.edu.hpu.mode.User;

public class UserAction2 {

	private User user;

	public String add(){
		System.out.println("name="+user.getName());
		System.out.println("age="+user.getAge());
		return "success";
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

User.java:

package cn.edu.hpu.mode;

public class User {

	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

链接:
访问User属性

 <a href="<%=basePath%>ognl/user2?user.name=tom&&user.age=21">OGNL2</a><br/>

(只有你传user.XXXX才能构造)

结果页面:

<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'ognl.jsp' starting page</title>
  </head>

  <body>
    OGNL SUCCESS!!<br/>
    <ol>
    	<li>访问值栈中对象的普通属性(get set 方法 ):
    	<br/>
 user-age:<s:property value="user.age"/>|<s:property value="user['age']"/></li>
    </ol>
    <s:debug></s:debug>
  </body>
</html>

显示结果:
OGNL SUCCESS!!
访问值栈中对象的普通属性(get set 方法 ): 
user-age:21|21
[Debug]

点击[Debug]可以查看到栈值中有user对象的存在

例3:

struts.xml

<package name="ognl" namespace="/ognl" extends="struts-default">
   <action name="cat1" class="cn.edu.hpu.ognl.OgnlAction2">
      <result name="success">/ognl.jsp</result>
  </action>
</package>

OgnlAction2.java:

package cn.edu.hpu.ognl;

import cn.edu.hpu.mode.Cat;

import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction2 extends ActionSupport{

	private Cat cat;

	public Cat getCat() {
		return cat;
	}

	public void setCat(Cat cat) {
		this.cat = cat;
	}

	public String execute(){
		return "success";
	}

	public String m(){
		return "Hello";
	}
}

Cat.java:

package cn.edu.hpu.mode;

public class Cat {

	private Dog friend;

	public Dog getFriend() {
		return friend;
	}

	public void setFriend(Dog friend) {
		this.friend = friend;
	}

	public String miaomiao(){
		return "miaomiao";
	}
}

Dog.java:

package cn.edu.hpu.mode;

public class Dog {

	private String name;

	public Dog(){

	}

	public Dog(String name){
		super();
		this.name=name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "dog:"+name;
	}
}

链接:
 访问Cat属性 

<a href="<%=basePath%>ognl/cat1?cat.friend.name=littleBoy" >OGNL3</a><br/>

结果页面:

<li>访问值栈中对象的普通属性(get set 方法 ):
    	<br/>
    	cat-friend-name:<s:property value="cat.friend.name"/></li>

结果:
访问值栈中对象的普通属性(get set 方法 ): 
cat-friend-name:littleBoy

观察[Debug],发现只有cat在值栈中,说明通过cat联系到dog,取得dog中的属性

访问cat方法:

<a href="<%=basePath%>ognl/cat1" >OGNL4</a><br/>

结果页面:

<li>访问值栈中对象的普通方法:
    	<br/>
    	cat-miaomiao:<s:property value="cat.miaomiao()"/></li>

结果:
访问值栈中对象的普通属性:
cat-miaomiao:miaomiao

访问action的普通方法:

<a href="<%=basePath%>ognl/cat1" >OGNL5</a><br/>

结果页面:

<li>访问值栈中action的普通方法:
    	<br/>
    	action-m():<s:property value="m()"/></li>

结果:
访问值栈中acion的普通方法:
action-m():Hello

转载请注明出处:http://blog.csdn.net/acmman/article/details/47069953

时间: 2024-08-18 07:33:28

【Struts2框架】第三节OGNL表达式-OGNL表达式例子的相关文章

【Struts2框架】第三节OGNL表达式-projection投影

projection(投影):俗话说就是过滤,就是过滤器把符合条件的过滤出来 struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="pro" class="cn.edu.hpu.ognl.OgnlAction4"> <result name="

【Struts2框架】第三节OGNL表达式-OGNL表达式例子2

1.OGNL静态访问例子 struts.xml: <struts> <!--允许静态方法的执行--> <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> <package name="ognl" namespace="/ognl" extends="struts

详解Java的Struts框架中栈值和OGNL的使用_java

值栈:值栈是一个集合中的几个对象保持下列对象提供的顺序: 值栈可以通过JSP,Velocity或者Freemarker的标签.有各种不同的标签在单独的章节中,我们将学习,用于获取和设置Struts 2.0 的值栈. ValueStack的对象里面可以得到动作如下: ActionContext.getContext().getValueStack() 一旦拥有了值对象,就可以用下面的方法来操纵该对象: OGNL:对象图形导航语言(OGNL)是一个功能强大的表达式语言是用来参考值栈上的数据和操纵.

Struts2框架学习之五:通用标签详解

前言 Struts2框架为我们提供了很多标签,这些标签总体上可以分为两类:通用标签和UI标签.而较常使用的又是通用标签,所以文章的内容也是围绕通用标签展开的.通用标签分为两类:数据标签和控制标签.数据标签用于访问值栈中数据,控制标签用于控制呈现页面时数据执行流程.如果需要使用Struts 2框架的标签库,需要在页面的首部引入以下代码:<%@ taglib uri="/struts-tags" prefix="s"%>下面将分别对这两种标签进行说明. 数据

struts2框架安装及配置

1.打开http://struts.apache.org/网站,点击右上角的struts2,在进入的页面点击Download Now,下载Full Distribution(完整版),并解压. 2.复制lib目录下的commons-logging-1.0.4.jar,freemarker-2.3.13.jar,ognl-2.6.11.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar到/WEB-INF/lib目录下(其他jar文件请根据需要复制). 3.在/WE

Struts2框架基础篇

首先,要了解Struts2框架中参数传递的大体流程: 服务器端的Web容器收到用户的请求(URL)--Struts2的核心控制器FilterDispatcher接受用户发起的请求,然后判断这个请求是交给action还是交给web组件来处理:如果请求的action或web组件不存在,就会报错404.在整个处理过程中,需要一个辅助对象: ActionMapper ,它会确定调用哪个Action--相应的action会根据struts.xml的配置信息(首先执行拦截此action的所有拦截器,然后再执

详解Java的Struts2框架的结构及其数据转移方式_java

Struts2的结构 1.为什么要使用框架? (1)框架自动完成了很多琐屑的任务 对于Struts2来说,它帮助我们方便地完成了数据类型转换.数据验证.国际化等等 Web开发中常见的任务.还有Spring中大量使用的Template模式,都是在让我们的开发 过程更加自动化.智能化.使用框架就是避免重新发明轮子,重新复制这些模板代码. 框架让我们将精力更多地放在更高级别的问题上,而不是常见工作流和基础任务上. (2)使用框架就是优雅地继承了框架背后的架构 框架背后的架构通常定义了一系列的工作流程,

广泛应用在国内大型网站系统的Struts2框架正在遭到黑客猛烈攻击

 利用Struts2"命令执行漏洞",黑客可轻易获得网站服务器ROOT权限.执行任意命令,从而窃取重要数据或篡改网页,目前国内至少有3500家网站存在该高危漏洞.据乌云漏洞平台显示,运营商及金融等领域大批网站,甚至包括政府网站均受Struts2漏洞影响. 据悉,Struts2"命令执行漏洞"早在2010年已经曝光,但当时没有公开的漏洞利用工具,因此并未造成过多危害.直到近期,针对该漏洞新的攻击代码在网上公开,漏洞利用工具也随之涌现,使黑客攻击完全没有门槛,80%以上

Struts2框架,表单请求到action出错,貌似找不到自定义action类中的方法。

问题描述 Struts2框架,表单请求到action出错,貌似找不到自定义action类中的方法. 关键代码如下: ${Msg.sendUser.username } 上面代码的意思是:把${Msg.sendUser}提交到action,赋值给 action类属性message的sendUser.(sendUser数据类型是User对象) 请求后提示找不到action中的自定义方法,但是我表单中的值换成下面 的,变成赋值给message的属性sendUser的属性username,就能成功. 是