Ongl的初始

控制器界面OnglAction

package com.web;

import org.apache.struts2.ServletActionContext;

import com.entity.Age;
import com.entity.Stu;
import com.opensymphony.xwork2.util.ValueStack;
import com.test.Employee;
import com.test.Student;

public class StuAction {
   /**
    * 此例用于模拟struts2的值栈计算过程
    * 
    * @param args
    */

   public String ongl1() {
   	//ValueStack是一个堆栈结构的容器 特点:先进后出
   	ValueStack vs =  ServletActionContext.getContext().getValueStack();
   	vs.push(new Employee("经理",1000));
   	vs.push(new Student("小明","aaaa"));
   	
   	System.out.println(vs.findValue("name"));
   	//输出为小明 因为先进后出的特点所以先取得name值小明
   	System.out.println(vs.findValue("salary"));
   	//输出为1000 因为Student里面没有该salary属性值,往后找到Employee里面salary的值为1000
   	
   	return "do";
   }
   
   /**
    * 值栈的使用
    * 
    */
   public String ongl2() {
   	//ValueStack是一个堆栈结构的容器 特点:先进后出 栈表示一个先进后出的数据结构
   	ValueStack vs =  ServletActionContext.getContext().getValueStack();
   	//push方法把项压入栈顶
   	vs.push(new Age("aaa", 10));
   	vs.push(new Age("bbb", 15));
   	vs.push(new Age("ccc", 20));
   	//pop方法移除栈顶对象并作为此函数的值返回该对象
   	Age e =(Age) vs.pop();
   	System.out.println(e.getId());
   	e =(Age) vs.pop();
   	System.out.println(e.getId());
   	e =(Age) vs.pop();
   	System.out.println(e.getId());
   	//输出由下往上取值 结果为:
   	/**
   	 * ccc
   	 * bbb
   	 * aaa
   	 */
   	
   	return "do";
   }
}

创建所需要的实体类

  • Age.java
package com.entity;

public class Age {
	private String id;
	private int age;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Age(String id, int age) {
		super();
		this.id = id;
		this.age = age;
	}
	public Age() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Age [id=" + id + ", age=" + age + "]";
	}
	
}

  • stu.java
package com.entity;

public class Stu {
	private String name;
	private String sex;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
	public Stu(String name, String sex, int age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	public Stu() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Stu [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
	
}

引用OnglExpression类

package com.test;

import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;

/**
 * 用于OGNL表达计算的一个工具类
 * 
 */
public class OnglExpression {
	private OnglExpression() {
	}

	/**
	 * 根据OGNL表达式进行取值操作
	 * 
	 * @param expression
	 *            ognl表达式
	 * @param ctx
	 *            ognl上下文
	 * @param rootObject
	 *            ognl根对象
	 * @return
	 */
	public static Object getValue(String expression, OgnlContext ctx,
			Object rootObject) {
		try {
			return Ognl.getValue(expression, ctx, rootObject);
		} catch (OgnlException e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 根据OGNL表达式进行赋值操作
	 * 
	 * @param expression
	 *            ognl表达式
	 * @param ctx
	 *            ognl上下文
	 * @param rootObject
	 *            ognl根对象
	 * @param value
	 *            值对象
	 */
	public static void setValue(String expression, OgnlContext ctx,
			Object rootObject, Object value) {
		try {
			Ognl.setValue(expression, ctx, rootObject, value);
		} catch (OgnlException e) {
			throw new RuntimeException(e);
		}
	}
}

配置struts-sy-xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
	"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<!-- 一个多包的概念,防止这个运行同样的项目路径包  -->  
	
	<package name="sy" extends="base" namespace="/sy">
	<!--配置方法名的路径名  /sy/demo/jieshou.action  -->
		<action name="/ongl_*" class="com.ongl.OnglAction" method="{1}" >
			<result name="do">/do.jsp</result>
		</action>
		
		<action name="/stu_*" class="com.web.StuAction" method="{1}" >
			<result name="do">/do.jsp</result>
		</action>
	</package>
</struts>

运行index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>


<!-- ongl  此例用于模拟struts2的值栈计算过程-->
<a href="${pageContext.request.contextPath}/sy/stu_ongl1.action">ongl方法讲解</a>
<!-- ongl  值栈的使用-->
<a href="${pageContext.request.contextPath}/sy/stu_ongl2.action">值栈的使用</a>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值