`

Struts2 的OGNL使用简介

阅读更多
<div align="center">
	  	<ol>
	  		<li>访问值栈中的Action的普通属性:username=<s:property value="username" /> | password=<s:property value="password" />  </li>	
	  		<li>Action的user属性值=<s:property value="user"/></li>
	  		<li>访问值栈中的对象的普通属性:Action的user属性的name属性值=<s:property value="user.name" /> | =<s:property value="user['name']" />  </li>	
	  		<li>访问值栈中的对象的普通属性:Action->cat->firend->name=<s:property value="cat.firend.name" /> </li>
	  		<hr>
	  		<li>
	  			访问值栈中的对象的普通方法username.length():<s:property value="username.length()"/>
	  		</li>
	  		<li>
	  			访问值栈中的对象的普通方法cat.miao():<s:property value="cat.miao()"/>
	  		</li>
	  		<li>
	  			访问Action的普通方法myTest():<s:property value="myTest()"/>
	  		</li>
	  		<hr>
	  		<li>
	  			访问静态方法: <s:property value="@com.mengya.util.Common@myStaticTest()"/>
	  		</li>
	  		<li>
	  			访问静态属性: <s:property value="@com.mengya.util.Common@str"/>
	  		</li>
	  		<li>
	  			访问Math类的静态方法: <s:property value="@@max(2,3)"/>
	  		</li>
	  		<hr>
	  		<li>
	  			访问普通类的构造方法: <s:property value="new com.mengya.bean.User()"/>
	  		</li>
	  		<li>
	  			访问普通类的构造方法: <s:property value="new com.mengya.bean.User().setName('mengya')"/>
	  		</li>
	  		<hr>
	  		<li>
	  			访问List:<s:property value="userList" />
	  		</li>
	  		<li>
	  			访问List中的某个元素:<s:property value="userList[1]" />
	  		</li>
	  		<li>
	  			访问List中元素的某个属性的集合:<s:property value="userList.{name}" />
	  		</li>
	  		<li>
	  			访问List中元素的某个属性的集合中的特定值:<s:property value="userList.{name}[1]" /> | <s:property value="userList[1].name" />
	  		</li>
	  		<li>
	  			访问Set:<s:property value="dogSet" />
	  		</li>
	  		<li>
	  			访问Set中的某个元素:<s:property value="dogSet[1]" /><!-- set没有顺序故取不到值 -->
	  		</li>
	  		<li>
	  			访问Map:<s:property value="catMap" />
	  		</li>
	  		<li>
	  			访问Map中某个元素:<s:property value="catMap.cat1" /> | <s:property value="catMap['cat1']" />
	  		</li>
	  		<li>
	  			访问Map中的所有keys:<s:property value="catMap.keys" />
	  		</li>
	  		<li>
	  			访问Map中的所有values:<s:property value="catMap.values" />
	  		</li>
	  		<li>
	  			访问容器的大小:<s:property value="catMap.size()" /> | <s:property value="userList.size()" />
	  		</li>
	  		<hr>
	  		<li>
	  			投影(过滤)user的name为aaa的集合:<s:property value="userList.{?#this.name=='aaa'}" /> | <s:property value="userList.{?#this.name=='aaa'}.{name}" />
	  			<!-- 得到的是一个[com.mengya.bean.User@d2efa1] | [aaa] 都是集合 --> | <s:property value="userList.{?#this.name=='aaa'}.{name}[0]" />
	  		</li>
	  		<li>
	  			投影(过滤)user的age大于21的第一个元素:<s:property value="userList.{^#this.age>21}" /> | <s:property value="userList.{^#this.age>21}.{name}" />
	  		</li>
	  		<li>
	  			投影(过滤)user的age大于21的第最后一个元素:<s:property value="userList.{$#this.age>21}" /> | <s:property value="userList.{$#this.age>21}.{name}" />
	  		</li>
	  		<li>
	  			投影(过滤)判断:<s:property value="userList.{$#this.age>21}.{name} == null " />
	  		</li>
	  		<hr>
	  		<li>
	  			[0]表示获得的是第一个Action:<s:property value="[0]" />	| <s:property value="[0].username" />
	  		</li>
	  	</ol>
  	</div>

 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<!-- 允许访问静态方法 -->
	<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
	
	<package name="ognl" extends="struts-default">
		<action name="ognl" class="com.mengya.action.OgnlAction">
			<result name="success">ognl.jsp</result>
		</action>
	</package>
</struts>

 

OgnlAction:

public class OgnlAction extends ActionSupport {

	private String username;

	private String password;

	/**
	 * 说明:在这里若user对象没有实例化,在页面访问action时给user的属性赋值了,struts2会自动帮我们实例化该user对象
	 * 前提是User对象提供了无参的构造方法。若页面没有给user的属性赋值则user为null(针对本实例,因为execute方法没有任何操作)
	 * 在这里若对user对象实例化了,则无论在页面访问action时是否也user的属性赋值,user都不会是null
	 */
	private User user = null;

	// private User user = new User();

	private Cat cat = null;

	private Common common = null;

	private List<User> userList = null;

	private Set<Dog> dogSet = null;

	public Map<String, Cat> catMap = null;

	@Override
	public String execute() throws Exception {
		// cat = new Cat();
		// Dog dog =new Dog();
		// dog.setName("Dog");
		// cat.setFirend(dog);
		userList = new ArrayList<User>();
		User u = new User();
		u.setName("aaa");
		u.setAge(21);
		userList.add(u);
		u = new User();
		u.setName("bb");
		u.setAge(22);
		userList.add(u);
		u = new User();
		u.setName("cc");
		u.setAge(23);
		userList.add(u);

		dogSet = new HashSet<Dog>();
		Dog d = new Dog();
		d.setName("dog1");
		dogSet.add(d);
		d = new Dog();
		d.setName("dog2");
		dogSet.add(d);
		d = new Dog();
		d.setName("dog3");
		dogSet.add(d);

		catMap = new HashMap<String, Cat>();
		catMap.put("cat1", new Cat());
		catMap.put("cat2", new Cat());
		catMap.put("cat3", new Cat());
		return SUCCESS;
	}

	public String myTest() {
		return "myTest方法";
	}

	public Cat getCat() {
		return cat;
	}

	public String getPassword() {
		return password;
	}

	public User getUser() {
		return user;
	}

	public String getUsername() {
		return username;
	}

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

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

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

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

	public Common getCommon() {
		return common;
	}

	public void setCommon(Common common) {
		this.common = common;
	}

	public List<User> getUserList() {
		return userList;
	}

	public void setUserList(List<User> userList) {
		this.userList = userList;
	}

	public Set<Dog> getDogSet() {
		return dogSet;
	}

	public void setDogSet(Set<Dog> dogSet) {
		this.dogSet = dogSet;
	}

	public Map<String, Cat> getCatMap() {
		return catMap;
	}

	public void setCatMap(Map<String, Cat> catMap) {
		this.catMap = catMap;
	}
}

 Action中所引用的Bean:

public class Cat {
	private String name;

	private Dog firend;

	public Dog getFirend() {
		return firend;
	}

	public void setFirend(Dog firend) {
		this.firend = firend;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public String miao(){
		return "cat的普遍方法调用";
	}
	
}

 

public class Dog {
	private String name;

	public String getName() {
		return name;
	}

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

 

public class User {
	private String name;

	private int age;

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

}

 

测试:

 

  • Struts2_OGNL.rar (3.6 MB)
  • 描述: Struts2 的OGNL使用简介实例
  • 下载次数: 86
分享到:
评论

相关推荐

    struts2 ognl的用法

    ### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...

    struts2中的OGNL的源码

    2. **方法调用**:可以使用OGNL调用对象的方法,如`list.add("item")`。 3. **集合操作**:支持对集合进行操作,如`list[0]`访问列表的第一个元素,`map["key"]`访问映射中的值。 4. **运算符支持**:包括算术运算...

    struts2 ognl用法项目

    1. **值栈访问**:Struts2使用值栈存储请求中的所有对象,OGNL可以从值栈顶部找到并访问对象。例如,`#request.user.name`表示从HTTP请求对象中获取`user`属性的`name`。 2. **动态方法调用**:OGNL支持直接调用...

    Struts2 ognl

    - **防范措施**:使用Struts2的安全插件如Struts2 Security Plugin来过滤和限制OGNL表达式的执行,或者启用OGNL的安全模式(Secure OGNL),避免执行危险的操作。 4. **源码分析** 阅读Struts2源码可以帮助理解...

    Struts2_OGNL

    OGNL(Object-Graph Navigation Language)是Struts2框架中的一个重要组件,用于在Web应用中访问和操作Java对象的属性,调用其方法,以及执行类型转换等操作。 OGNL是对象图导航语言的缩写,它是一种功能强大的...

    struts2 ognl源码

    OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于在Action对象和视图之间传递数据。在这个主题中,我们将深入探讨Struts2 OGNL2.6.11的源码,了解其内部工作原理和关键功能。 首先,...

    struts2 中 OGNL表达式的使用

    struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用

    struts2 OGNL表达式

    在提供的压缩包文件"Struts2_1900_OGNL"中,可能包含了一些关于Struts2 OGNL表达式使用和安全性的示例代码、教程文档或是漏洞分析。通过研究这些内容,你可以更深入地理解和掌握Struts2框架中OGNL表达式的运用,以及...

    struts2 OGNL表达式使用

    struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...

    Struts2 使用OGNL表达式

    这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来访问和修改对象的属性,甚至可以处理复杂的对象结构。以下是一些关于...

    Struts2核心包ognl-2的源代码

    5. **安全特性**:在Struts2中,OGNL的不当使用可能导致安全漏洞,如著名的Struts2 OGNL注入攻击。源代码中包含了对这种风险的防护措施,如输入过滤和安全配置选项。 深入学习这些源代码,开发者不仅可以了解OGNL的...

    struts2 ognl表达式

    Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...

    Struts2之Ognl详解案例TextOgnl

    因此,在实际应用中,应确保对用户输入进行严格的校验和过滤,或者使用Struts2的安全插件来防止OGNL注入。 五、总结 OGNL在Struts2中扮演着关键角色,它简化了数据绑定和对象交互。然而,开发者也需要注意其潜在的...

    Struts2 OGNL示例(Maven项目)

    这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,帮助开发者更好地理解和应用这一强大的特性。 首先,让我们了解什么是OGNL。OGNL是一种强大的表达式语言,允许我们访问和修改对象图中的...

    Struts2 OGNL标签详解析实例

    Struts2 OGNL---标签详解析 都有实例 适合初学者

    struts2 OGNL语言学习笔记

    Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...

    struts2 OGNL 表达式及各种标签的使用

    本文将深入探讨OGNL的基本用法、标签的使用以及其在Struts2中的实际应用。 1. **OGNL基本概念** - OGNL是一种表达式语言,用于获取和设置对象属性。它支持点号和索引访问、方法调用、运算符、集合操作等。 - 例如...

    struts2 OGNL 详细教程

    关于struts2 OGNL 详细教程,对初学者有帮助

    对 Struts2 OGNL 的分析与简介

    4. **值栈操作**:Struts2使用值栈存储请求相关的对象,OGNL可以直接访问值栈中的元素。`#{request.user}` 或 `#{session.user}` 可以分别获取请求和会话范围内的对象。 5. **方法调用**:OGNL支持直接调用对象的...

Global site tag (gtag.js) - Google Analytics